酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

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

Rmagickを使って縦横の比率がバラバラの画像から、正方形のサムネイルを切り出すRubyのサンプルソースです。以前は大きな画像を縮小するだけでしたが、今回は縦・横の両方が予定のサイズ以上なら切り出して正方形、それよりも小さい場合は空白で埋めて画像を拡大しないように調整。


ソースコード

サンプルソースでは次のことをしています。

(1) サンプルの画像をダウンロード
(2) Rmagickを使って正方形のサムネイル画像を切り出し
(3) ./data/フォルダにサムネイル画像を保存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

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

out_thumb

Special Thanks

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

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

gist: 494174

変更来歴

(12/12/31 10:15) 「補足:画像を単純にDLしたい場合」を追加
(14/04/16 23:10) サンプルソースを書き直し

おすすめの書籍