使用RMagick复合处理图像

时间:2014-08-30 15:34:16

标签: ruby image imagemagick image-manipulation rmagick

我试图从两个原始图像,背景和叠加层创建合成图像,我使用RMagick进行操作,如下所示:

background = ImageList.new("foo.png")
overlay_original = ImageList.new("bar.png")
overlay_resized = overlay_original.resize_to_fit(400,400)
overlay_cropped = overlay_resized.crop(NorthWestGravity, 400, 200)

new_image = ImageList.new
new_image = new_image.composite_layers(background)
new_image = new_image.composite_layers(overlay_cropped)

当我这样做时,它会给我以下错误:ArgumentError: no images in this image list

当我尝试检查backgroundoverlay_cropped图片列表(background.lengthoverlay_cropped.length)的长度时,它会告诉我background图片列表有1张图片,但overlay_cropped没有图片:

NoMethodError: undefined method length' for bar.png PNG 640x1096=>400x200 400x400+0+0 DirectClass 8-bit:Magick::Image

关于我做错的任何想法?我猜测答案非常明显。

1 个答案:

答案 0 :(得分:1)

通过将问题更改为以下问题解决了问题:

marketing_image = marketing_image.composite(background, NorthWestGravity, 0, 0, OverCompositeOp)
marketing_image = marketing_image.composite(overlay_cropped, NorthWestGravity, 327, 126, OverCompositeOp)