@Konboi memo

主に技術に関してつらつらと。

RMagickでcomposite するときにハマった。

Rubyで画像を取り扱うときに gem RMagick はよく使うと思います。

RMagickを使って画像を合成しようとした時に嵌ったのでメモがてらの記事です。

嵌ったコード

image    = Magick::ImageList.new(‘image/image1.jpg’)
composite_image = Magick::ImageList.new('./image/composite.jpg')

image.composite(composite_image, 10, 10, Magick::OverCompositeOp);
image.write(‘image/generate.jpg')

なんかいやっても image/generate.jpg が生成されなくて嵌った。

ドキュメントみたら ..orz ってなったし 冷静になったらそうだよねってなった。

解決方法

方法1

image    = Magick::ImageList.new(‘image/image1.jpg’)
composite_image = Magick::ImageList.new('./image/composite.jpg')

image.composite!(composite_image, 10, 10, Magick::OverCompositeOp);
image.write(‘image/generate.jpg')

方法2

image    = Magick::ImageList.new(‘image/image1.jpg’)
composite_image = Magick::ImageList.new('./image/composite.jpg')

save_image = image.composite(composite_image, 10, 10, Magick::OverCompositeOp);
save_image.write(‘image/generate.jpg')

簡単に言うと

compositeの時は 返り値にオブジェクトを返すけど、 composite!の時は 返り値がなく実行したオブジェクトの画像が上書きされる

ってとこでハマってた。

まとめ

ちゃんとドキュメント読みましょう。

ちなみにRMagickのメソッドはこちら

ImageMagick逆引きコマンドリファレンス

ImageMagick逆引きコマンドリファレンス