Rmagickを使って縦横の比率がバラバラの画像から、正方形のサムネイルを切り出すRubyのサンプルソースです。以前は大きな画像を縮小するだけでしたが、今回は縦・横の両方が予定のサイズ以上なら切り出して正方形、それよりも小さい場合は空白で埋めて画像を拡大しないように調整。
🎂 ソースコード
サンプルソースでは次のことをしています。
(1) サンプルの画像をダウンロード
(2) Rmagickを使って正方形のサムネイル画像を切り出し
(3) ./data/フォルダにサムネイル画像を保存
require 'rubygems' require 'open-uri' require 'rmagick' # gem install rmagick
def shrink_to_fill(image, width, height) image.resize_to_fill!(width, height) image end
def cover_white(image, width, height) new_width = (image.columns < width) ? image.columns : width new_height = (image.rows < height) ? image.rows : height
image.resize_to_fit!(new_width, new_height) image_out = Magick::Image.new(width, height) image_out.background_color = '#ffffff' image_out.composite!(image, Magick::CenterGravity, Magick::OverCompositeOp) image_out end
# flickr上のクリエティブ・コモンズの画像 image_url = "http://farm4.staticflickr.com/3319/3584524809_f791a000e0_z.jpg" width = 300 height = 300
res = open(image_url) if res.content_type =~ /^image/ thumb = Magick::Image.from_blob(res.read).shift
if thumb.columns < width or thumb.rows < height thumb_out = cover_white(thumb, width, height) else thumb_out = shrink_to_fill(thumb, width, height) end
open("./out_thumb.png", 'w').print thumb_out.to_blob end
|
では動作確認です。

上の画像(640×480)が下のように正方形(300x300)になりました。

👽 参考リンク
RMagickで正方形のサムネイルを作成する方法
Rmagickで画像を比率を保って縮小、そして正方形に
gist: 494174
🐰 変更来歴
(12/12/31 10:15)「補足:画像を単純にDLしたい場合」を追加
(14/04/16 23:10) サンプルソースを書き直し
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!