LoginSignup
12
12

More than 5 years have passed since last update.

ImageMagickで複数の画像を重ねあわせる

Posted at

やりたいこと

透過png画像Aと透過png画像Bを重ねあわせた新しい透過png画像Cを作る

これと

umaru.png

これを合わせて

seiva.png

こんなのを作る(全部背景透過のPNG)

done.png

やりかた

1. ImageMagickのインストール

Macであれば

$ brew install imagemagick

2. ライトセイバーの回転

ImageMagickのconvertコマンドでできる。
-backgroundを指定しないと白背景になってしまうので必ず指定する。

convert -background 'rgba(0,0,0,0)' -rotate -45 saber.png saber_rotated.png

3. 合成

まず背景領域を設定して、そこに配置していく流れ。

#ここで rotate をやろうとすると全体が回転してしまうのでやらない

$ convert -size 440x370 xc:none \
      umaru.png -geometry +210+110 -composite \
      saber_rotated.png -geometry +0+0 -composite \
      result.png

(参考)上記をRubyでまるっとできるようにしたら苦労した

example.rb
Image = Struct.new(:path, :point_x, :point_y, :rotate)

# umaru.pngの(115, 14)の点とsaber.pngの(25, 296)の点を重ねあわせる回転は45度
umaru = Image.new("umaru.png", 115, 14, 0)
saber = Image.new("saber.png", 25, 296, 45)

ImageComposer.new([umaru, saber]).compose

こんな感じで実行できるようにしたんですが、rotateすると元の点の座標が変わってしまうので、回転後の座標に直したり、全体のサイズを -size で指定してしないと行けないので計算する必要があったりと地味に面倒でした。

実際にやったのは更にいくつか条件入っていたりなのでコード載せられないのですが、久々にsinとかcosとかatan2とか使いました。

ちなみにrmagickはよくわからなかったので convert を system メソッドで実行していて、画像サイズの取得とかも必要だったのでそれもrmagickではなくfastimageを使って簡単に取得しました。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12