ruby - MiniMagick:如何添加大于源图像的叠加库存图像?

标签 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"来测试结果

最佳答案

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

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

enter image description here

关于ruby - MiniMagick:如何添加大于源图像的叠加库存图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450852/

相关文章:

jquery - 使用 Ruby/Sinatra 以 HTML 形式呈现 ajax 调用结果

ruby-on-rails - 创建时的 Ruby (Rails) 字符串操作

ruby-on-rails - MiniMagick 中的图像调整大小和裁剪算法

ruby-on-rails - 使用 Rspec 测试 rake 任务不接受参数

ruby - 在 Ruby 多维数组中查找和替换

opencv - 图像处理中的 anchor

image - 图像的结构如何

python - 使用python为图像添加边框

Heroku + MiniMagick + ImageMagick 加载库时出错

ruby-on-rails - Rails 错误 : ImageMagick/GraphicsMagick is not installed