RMagickは、ImagemagickをRubyで使うためのgemです。 gemとは、Rubyのライブラリのことです。
インストール
他のgemと同じように、gemコマンドでインストールします。
$ gem install rmagick
使い方
LinuxのコマンドラインからImagemagickを使うのとは異なります。 RMagickは、Rubyのプログラムにrequireで取り込みMagickモジュールをincludeして使います。 プログラム中では、RubyのクラスであるImageまたはImageListクラスのインスタンスを作成し、インスタンスメソッドをコールして使います。 sample.jpgを読み込んでディスプレイに表示するには次のようにします。
require 'rmagick'
include Magick
i = ImageList.new('sample.jpg')
i.display
以下では、requireとincludeコマンドは、プログラムリストから省略します。
ImageとImageList
画像データはImageオブジェクトとして扱われます。 画像ファイルsample.jpgをImageインスタンスに取り込むには、readクラス・メソッドを使います。
a = Image.read('sample.jpg')
i = a[0]
i.display
画像ファイルには複数のフレームが含まれることがあります。 例えば、アニメーションgifは複数の画像を順次表示することによりアニメーションを実現しています。 そのような画像に対応するため、readメソッドは各フレームをImageインスタンスにし、その配列を返します。 したがって、Image.read('sample.jpg')では1枚の画像(フレーム)からなる配列を返すので、Imageインスタンスを取得するには「i=a[0]」とする必要があります。
ImageListインスタンスはImageインスタンスのリストです。 「リスト」は「配列」のようなものだと考えて構いません。 ImageListには「現在のImage」というのがあり、Imageに対するメソッドを受け取った場合には「現在のImageインスタンス」をレシーバとしてメソッドを実行します。 ImageListに画像ファイルを読み込むには、newクラスメソッドを使います。
以上のことから、ImageListクラスを使うのとImageクラスを使うのに大きな差はありませんが、どちらかというとImageListの方が使いやすいと思います。 次の項目からは、RMagickの3つの使用例を紹介します。
画像形式の変更
JpegからPngに画像形式を変更します。
i = ImageList.new('sample.jpg')
i.write('sample.png')
リサイズ
sample.jpgの画像サイズを240x180に収まるように変更してsmall.jpgとして書き出します。 元の画像の縦横比が240:180=4:3でない場合は、余白が生じますが、その余白は生成された画像に含まれません。 例えば、480x300の元画像をresize_to_fitすると、240x150の画像になります。
i = ImageList.new('sample.jpg')
i = i.resize_to_fit(240,180)
i.write('small.jpg')
画像の重ね合わせ
sample.jpgの上にoverlay.jpgを被せます。 できあがる画像サイズはsample.jpgと同じで、もしoverlay.jpgがそこからはみ出る場合はカットされます。 このような重ね合わせのときの動作は、composte operatorで指定でき、AtopComposteOpはそのひとつです。 Gravityは被せる画像の位置をしていするもので、CenterGravityは中央に配置します。
i = ImageList.new('sample.jpg')
j = ImageList.new('overlay.jpg')
i = i.composite(j, CenterGravity, AtopCompositeOp)
i.write('composite.jpg')
ドキュメント
インターネット上にRMagickのドキュメントがあります。 もしもドキュメントをダウンロードしたい場合は、RMagickのソースをダウンロードします。 そして、doc/index.htmlをブラウザで開けばドキュメントを見ることができます。 また、モジュール、クラス、メソッド全体については、RDocで生成されたドキュメントがあります。