(ruby)(WindowsXP + ImageMagick + RMagick の 環境を作ってみた)

 rubyで画像を色々と編集してみたいなとも思い
rubyにライブラリがあるかどうかを調べてみた所
とりあえず RMagickを使ってみることにしました

 インストールで ちょっと いろいろともたついてしまったんですが
最終的には rubyforgeに 二つともまとめてあるのを発見 笑)
何だったのだ あの苦労は・・・ 笑)
ちゃんと分かっている人なら 全て最新版の環境を構築できるんでしょうけどね・・・ 笑)

 (rubyforgehttp://rubyforge.org/projects/rmagick/ から(rmagick-win32)に入り
そのページの下のほうを見ると
ImageMagickインストーラー と RMagickのgem を zipにまとめてあるものがあります
この記事を書いている時の最新版は
「RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip」
でした

 これを解凍すれば
ImageMagick-6.4.8-6-Q8-windows-dll.exe」 と
「rmagick-2.9.0-x86-mswin32.gem」 が 出てきます

ImageMagickは普通にインストールすれば 特に問題は無いかと思います
RMmagick は コマンドプロンプトから
gem install -l rmagick-2.9.0-x86-mswin32.gem
とすれば gemでインストール出来ると思います

 続いて VC++2008 の 「再頒布可能パッケージ」をインストールします
VC++2008」 や 「VC++ 2008 Express Edition」などを 既にインストールしていれば
この作業は 必要ないかと思います
これは マイクロソフトのダウンロードセンターから入手する事ができます
Microsoft Visual C++ 2008 Redistributable Package (x86)」もしくは
Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)」などで検索して出てくる
ダウンロードセンターのページから 「vcredist_x86.exe」をダウンロードして インストールします

 最後にPCの再起動をします
これは ImageMagick環境変数を書き換えていますので それをきちんと反映させるために
一度は再起動させたほうが よろしいかと思います

 まぁ ここまでやったからには いろいろと 勉強しないとですね・・・ 笑)
そろそろ rubyまとめページ 作ろうかしら? 笑)

 まだまだ 基本中の基本を 勉強中ですけど
とりあえず 一個 サンプルをば・・・
ある画像(背景)の上に 別の画像を貼り付ける操作の 基本ですね
#!ruby -Ks

require 'RMagick'

# 貼り付けたい画像をロードする
img = Magick::ImageList.new("<ここにロードさせたい画像ファイル名>")

# 以後
# 背景は 貼り付けたい画像より 縦横50px大きい画像を生成する
# という事を前提とします

# 単純に無地の背景を作る場合
# 色を付けたい時は attribute の background_color(背景色)にセットします
# rubyのAttribute(アトリビュート) ≒ 他言語でいうProperty(プロパティ) ですね
back_img = Magick::Image.new(img.columns+50, img.rows+50){
  self.background_color = '#000060'
}

# グラデーションを背景にする場合、(GradientFillクラスを利用する場合)
my_gradient = Magick::GradientFill.new(0, 0, 0, 0, '#ffeea0', '#ac7040')
back_img_gradient = Magick::Image.new(img.columns+50, img.rows+50, my_gradient)

# グラデーションを背景にする場合、(ImageMagickの機能を利用する場合)
back_img_gradient2 = Magick::Image.read("gradient:#ff5000-#00ff60"){
  self.size = "#{img.columns+50}x#{img.rows+50}"
}[0]

# ImageMagickの機能の ビルトインパターンを背景にする場合
# 今回は HEXAGONS というパターンを使っています
back_img_pattern = Magick::Image.read("pattern:HEXAGONS"){
  self.size = "#{img.columns+50}x#{img.rows+50}"
}[0]

# ImageMagickの機能の プラズマ(フラクタル)を背景にする場合
back_img_plasma = Magick::Image.read("plasma:fractal"){
  self.size = "#{img.columns+50}x#{img.rows+50}"
}[0]

# Image.read と なっているところの最後が [0] となっていることに 気付くと思いますが
# Image.readメソッドの場合 Imageオブジェクトの配列 で 返ってくるので
# Imageオブジェクトで受けたい場合は 代入時に [0] で
# 一つ目の要素である事を明記する必要があります
#
# もし [0] 無しで back_img_gradient2 に 代入した場合は
# 使う時に back_img_gradient2[0] とすれば 同じ結果になります、が
# 配列で受けるよりも Imageオブジェクトで受けたほうが
# この場合は いろいろとスマートに処理できると思われます

# 背景に画像を貼り付けて ファイルに保存します
back_img.composite(img, Magick::CenterGravity, Magick::OverCompositeOp).write("01_normal.jpg")
back_img_gradient.composite(img, Magick::CenterGravity, Magick::OverCompositeOp).write("02_gradient.jpg")
back_img_gradient2.composite(img, Magick::CenterGravity, Magick::OverCompositeOp).write("03_gradient2.jpg")
back_img_pattern.composite(img, Magick::CenterGravity, Magick::OverCompositeOp).write("04_pattern.jpg")
back_img_plasma.composite(img, Magick::CenterGravity, Magick::OverCompositeOp).write("05_plasma.jpg")
「include RMagic」 とすれば 「Magick::」を書く必要はなくなりますが
個人的には その書き方はちと抵抗があるので あえて includeせずに 毎度 「Magick::」と指定してます
VisualBasicの 「With Magick 〜 End With」みたいに 明確に指示できるのなら
省略して書くのも ありなんですけどね 笑)
・・・もしかして rubyにもそういうのあるのかな?・・・、 ん〜 初心者だし わかんなーい 笑)