RubyでRMagickを使って正方形のサムネイルを作成


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

では動作確認です。

Another dog

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

out_thumb

🍣 参考リンク

RMagickで正方形のサムネイルを作成する方法

Rmagickで画像を比率を保って縮小、そして正方形に

gist: 494174

🗻 変更来歴

(12/12/31 10:15)「補足:画像を単純にDLしたい場合」を追加

(14/04/16 23:10) サンプルソースを書き直し

📚 おすすめの書籍