仕事: 2007年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"

このアーカイブについて

このページには、2007年3月以降に書かれたブログ記事のうち仕事カテゴリに属しているものが含まれています。

前のアーカイブは仕事: 2005年3月です。

次のアーカイブは仕事: 2007年4月です。

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