我有一个叠加图像,就像水印/徽标一样,需要叠加在源图像的顶部(同时保留alpha通道等)
当叠加与源图像相同或更小的尺寸时 - 事情很简单:
composite.exe -alpha on -gravity center logo.png in_image.jpg out_image.jpg
但是,当logo.png大于in_image.jpg时 - 上面的调用会截断徽标,而out_image.jpg的尺寸与in_image.jpg相同
我希望得到的图像是logo.png或in_image.jpg中最大的图像,所以我可以做照片周围的艺术框架。
下面的图片展示了我希望能够得到的最终结果: Desired Result
注意,这里,带有头骨的png比kiddo的图像具有更大的暗淡。需要保留alpha通道。
编辑:通过示例更清晰
这是另一个desired result 这里,png文件两侧是不透明的,中间有一个清晰的窗口,半透明的半泡。 JPG文件只是来自相机的常规JPG。
很想添加导致它的原始文件和徽标文件,但缺少添加2个以上链接(或添加图像)的声誉
答案 0 :(得分:0)
尝试使用转换而不是复合。它比复合材料更灵活。
convert logo.png in_image.jpg -gravity center -compose over -composite out_image.jpg
但如果你坚持使用复合材料,那么
composite in_image.jpg logo.png -gravity center -compose src_over out_image.jpg
请注意保留Alpha通道的确切含义,因为jpg不支持透明度。也许您可以发布一对输入和您想要的输出,如果我发布的内容不符合您的要求。
答案 1 :(得分:0)
更新了答案
如果你有 ImageMagick 的v7,你可以使用-fx
在一行中为你做数学计算,以确定两个图像中较大的图像的尺寸: / p>
magick background.jpg overlay.png -background none -gravity center -extent '%[fx:u.w>v.w?u.w:v.w]x%[fx:u.h>v.h?u.h:v.h]' -composite result.png
基本上说... "按如下方式扩展两个图像。如果第一个图像(u.w
)的宽度大于第二个图像(v.w
)的宽度,则使用第一个图像的宽度,否则使用第二个图像的宽度。高度相同。" 。
原始答案
我相信你想要这个。获得更宽的背景和叠加的宽度。获得高度背景和叠加的高度。使用透明像素将背景和叠加层扩展到新尺寸。覆盖。
所以,如果我们从这开始作为背景(300x50):
这是叠加层(122x242) - 这是一个高透明的蓝色矩形,然后用黑色边框显示它的范围:
你会运行它,这实际上很简单,但它充满了注释和调试输出,所以你可以看到发生了什么:
#!/bin/bash
# Get background width and height
read wb hb < <(convert background.jpg -format "%w %h" info: )
echo "Background: " $wb $hb
# Get overlay width and height
read wo ho < <(convert overlay.png -format "%w %h" info: )
echo "Overlay: " $wo $ho
# Get wider of the two
w=$wb
[ $wo -gt $w ] && w=$wo
# Get taller of the two
h=$hb
[ $ho -gt $h ] && h=$ho
echo "New dimensions: " $w $h
convert background.jpg overlay.png -background none -gravity center -extent ${w}x${h} -composite result.png
以下是它的运行方式:
Background: 300 50
Overlay: 122 242
New dimensions: 300 242
据推测,当你完成叠加后,你会添加-trim
作为命令行的最后一部分,以删除任何已添加的无关内容。