RMagickを使って透過pngを重ねて合成する

例として、0.png ~ 9.pngまでの透過pngが用意されていて、それを重ねて1枚の画像に出力する。

require 'RMagick'

image = nil
10.times do |num|
  # 画像データを読み込む
  tmp_image = Magick::Image.from_blob(File.read("/path/to/#{num}.png")).first

  # imageがnilの場合はimageに代入
  # imageにすでにobjectが代入されている場合はcompositeを呼び出し画像を重ねる  
  if (image.nil?)  
    image = tmp_image
  else 
    image = image.composite(tmp_image, 0, 0, Magick::OverCompositeOp)
  end
end

# 画像を書き出す
image.write('/path/to/result.png')

Magick::OverCompositeOpをオプションとして設定しないと透過されないので注意。