[Ruby on Rails]RMagickを使って3種類のサムネイル画像を作る

user-pic
0
更新をサボり続けたあげく、突然何の前触れもなくRuby on Railsのサンプルコードを知ったかぶって載せてみるテスト。

Ruby on RailsといいつつRailsは関係なくて単にRubyのコードのようです。
1枚の画像から3種類のサイズのサムネイルを作ります。
サイズごとにファイル名の先頭に"l_","m_","s_"のプレフィックスをつけます。
横サイズは指定されたサイズ、縦サイズは元画像の縦横比率を維持して計算されます。
動作環境はWindowsでRuby,ImageMagick,RMagickが必要です。
#!/C:\ruby\bin
require 'RMagick'

# 変換テーブル
sizes = {:prefix => "l_", :size_x=>400},
        {:prefix => "m_", :size_x=>200},
        {:prefix => "s_", :size_x=>100}

# 変換元ファイル
in_file1 = 'C:\\temp\\cat1.jpg'
in_file2 = 'C:\\temp\\cat2.jpg'

# 出力先フォルダ
out_dir = 'C:\\temp\\'

# RMagickのインスタンスを作成
images = Magick::ImageList.new(in_file1,in_file2)

# 画像の個数分繰り返し
images.each do | image | 

  # 変換後画像名を時刻で決める
  out_file = Time.now.to_f.to_s

  # 元画像の縦横サイズを取得
  image_x = image.columns.to_f
  image_y = image.rows.to_f
  
  # 変換テーブルの個数分繰り返し
  sizes.each do | size |

    # 変換後サイズ(横:変換テーブルの値、縦:元画像の縦横比率で計算)
    image_x_min = size[:size_x]
    image_y_min = (image_y/image_x * image_x_min).round
    
    # サイズ変換して保存
    image.resize!(image_x_min, image_y_min)
    image.write(out_dir + size[:prefix] + out_file + '.' +image.format)

  end
end

画像1個に対して複数枚のサムネイルを作るのにファイル名とサイズの対応が面倒じゃのう~って思ってたんだけど、そこはRubyという言語のすばらしさなのかシンプルに表現できた。
VBScript,VB.Net経験が長い自分にとってはこの辺が面白いところ。(しかしハマりどころでもある。カッコの使い方がわからないよ~)

個人的なポイント。
配列をこう宣言すると、
sizes = {:prefix => "l_", :size_x=>400},
        {:prefix => "m_", :size_x=>200},
        {:prefix => "s_", :size_x=>100}
こう使えるのね。
sizes.each do | size |
  p size[:prefix] + "," + size[:size_x].to_s
end
で、出力結果:
"l_,400"
"m_,200"
"s_,100"

トラックバック(0)

トラックバックURL: http://blog.io/mt/mt-tb.cgi/175

リア・ディゾン テレビでのパンチラ!andお宝! - 画像 無修正 動画 無料 (2007年3月25日 16:48)

リア・ディゾン テレビでのパンチラ!andお宝! 続きを読む

Ruby(ルビー) Rubyニュース - Ruby(ルビー) Rubyニュース (2007年3月26日 13:43)

Rubyニュース 続きを読む

コメントする

このブログ記事について

このページは、CHoが2007年3月25日 15:26に書いたブログ記事です。

ひとつ前のブログ記事は「誤変換:裸婦を表示できません」です。

次のブログ記事は「外山恒一の憂鬱」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。