RMagick

RMagickはImageMagickのRubyBindingでいろんな画像処理ができるもの.

とりあえずImageMagickがないと始まらないのでめんくさいからさくっとmacportsでインストール.

$ sudo port install ImageMagick

でインストール.これが重い.なんだかえらい時間かかった.X86Freeからインスコしてるみたいだから当然っちゃ当然か.
無事インストール完了したら.

$ /opt/local/bin/convert logo: logo.gif

でおっさんが表示されてる"logo.gif"という画像ができてるかを確認すれば,ImageMagickがインストールされてるか確認できる.無事おっさんが表示されてるみたいなので,ひとまず完了.

お次ぎはRMagickのインストール.こちらからまずはソースをダウンロードして展開,インストール
http://rubyforge.org/frs/?group_id=12&release_id=12242

$ tar zxvf RMagick-1.15.7.tar.gz
$ cd RMagick-1.15.7
$ ./configure
$ make

makeの最後で

setup.rb:             Too many examples failed. The RMagick documentation cannot be installed
            successfully. Consult the README.txt file and try again, or send email
            to rmagick@rubyforge.org.
make: *** [all] Error 1

こんな感じのエラーが出たけど,特に問題なく

$ sudo make install

で完了.

適当に

#!/usr/local/bin/ruby

require 'RMagick'
include Magick

original = ImageList.new("sample.jpg")
thumb = original.resize_to_fit(120,120)
thumb.write "sample_thumb.jpg"

exit

とかして"sample_thumb.jpg"という画像が縮小されて生成されてれば完了かな.

後はRailsのプロジェクトに組み込むところかなー.

RMagick2

今作ってるシステムが画像をデータベースに保存しようとしてるので,その辺のデータをRMagickで使えるようにしたい.
っつーことで,まずはデータベースからその画像が保存されているレコードを引っ張ってみる.モデルは"Image".だけどRMagickの"Image"とかぶるのでなんとかした方がいいんだろうか…includeしなきゃ平気なのかしら.

def img_data
  image = Image.find(params[:id])
  # RMagickに取り込む
  magick_img = Magick::Image.from_blob(image.data).first
  # 小さくしてみる
  thumb = magick_img.resize_to_fit(120,120)
  # 再びバイナリデータに
  img_data = thumb.to_blob{ self.format = 'jpeg' }
  # 表示用にデータを送る
  send_data(image_data, { :filename => 'test.jpg', :type => image.content_type, :disposition => 'inline' })
end

from_blobの返り値がよく分からないけど,これで取れてるところを見ると,一番最初が画像データなのかな…

[ JPEG 640x480 640x480+0+0 DirectClass 8-bit 43kb]

こんな感じで帰ってきてるみたいだから二つ目の項目がサイズとかどの辺りなのか.
とりあえずこれで大きな画像が縮小されて表示された模様.

今後はアップロードしたときにこの辺の処理を入れて表示のときはもっとシンプルにしないと.
ちなみに画像の取り扱いはファイルとして扱った方がいいのか,はたまたデータベース上で保持しちゃった方がいいのか,一長一短な気もするけどどっちがいいんだろう.教えてエロい人.