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]
こんな感じで帰ってきてるみたいだから二つ目の項目がサイズとかどの辺りなのか.
とりあえずこれで大きな画像が縮小されて表示された模様.
今後はアップロードしたときにこの辺の処理を入れて表示のときはもっとシンプルにしないと.
ちなみに画像の取り扱いはファイルとして扱った方がいいのか,はたまたデータベース上で保持しちゃった方がいいのか,一長一短な気もするけどどっちがいいんだろう.教えてエロい人.