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) サンプルソースを書き直し

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍