MiniMagick:如何添加比源更大的叠加图像?

时间:2016-02-17 07:56:58

标签: ruby image-processing minimagick

我们正在尝试从我们的应用中构建自定义社交分享图片。后端使用Ruby / Sinatra构建,我们已经使用MiniMagick + AWS-SDK上传用户图像。

我们要做的是拍摄用户的图片,并在用户图片的顶部添加一个股票叠加层(它包含一个白色圆圈作为可变用户图像的占位符)。我尝试使用MiniMagick的内置composite方法,使用Over作为运算符,但Over的问题是,如果叠加层大于源,则会自动调整根据来源的大小。我们的叠加层较大,我们希望保留叠加层,使得生成的图像具有完整的叠加层,其中部分用户图像适合下方可见的占位符白色圆圈。

我试过了How to use Imagick to merge and mask images?,但它并没有解决我的问题。

基本上,说这是叠加层。

Stock Overlay

以此示例用户图像为例:

https://s-media-cache-ak0.pinimg.com/564x/71/08/b5/7108b5a89ce3d6cc0341f876681f8546.jpg

我希望生成的图像是完整的叠加图,其中一个圆圈后面的用户图像可见。

更新

根据Mark's的答案,我编写了以下Ruby代码来实现结果:

avatar = avatar.resize "200x200"
result = mask.composite(avatar) do |c|
    c.compose "DstOver"
    c.geometry "+100+120" #this could be different depending on your mask's dimensions
end 

您可以通过执行result.write "result.jpg"

来测试结果

1 个答案:

答案 0 :(得分:1)

不太确定你在做什么,因为你的面具是不透明的JPEG?但是,我认为你的意思是使用透明的PNG作为带有孔的面具,在这种情况下你可以这样做:

convert mask.png \( avatar.jpg -resize 200x200 \) -geometry +360+150 -compose dst-over -composite result.jpg

enter image description here