choblog

更新は大抵仕事が詰まっているとき。つまり、サボろぐです。映画の話題面白Webサイトの紹介を不定期に更新中。

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

更新をサボり続けたあげく、突然何の前触れもなく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"
Posted by CHo at 2007年03月25日 15:26 | コメント (0) | Clip!!

この記事に対するコメント

この記事に対するコメントはまだありません。


コメントを投稿する

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?



DMMアダルトビデオ動画 アニメ動画
Made with dreamweaverMade with fireworksPowered by Movable Type 3.35Powered by Wandering Wind
Copyright : [Articles] (C) choblog All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.