【问题标题】:How can I overlay a larger watermark/frame image on a smaller one?如何在较小的图像上叠加较大的水印/帧图像?
【发布时间】:2017-05-01 22:41:36
【问题描述】:

我有一个叠加图像,类似于水印/徽标,需要叠加在源图像之上(同时保留 Alpha 通道等)

当叠加层与源图像的尺寸相同或更小时 - 事情很简单:

composite.exe -alpha on -gravity center logo.png in_image.jpg out_image.jpg

但是,当 logo.png 大于 in_image.jpg - 上面的调用会截断 logo,并且 out_image.jpg 与 in_image.jpg 具有相同的尺寸

我希望生成的图像是 logo.png 或 in_image.jpg 中最大的一个,这样我就可以在照片周围做一些艺术框架之类的事情。

下图展示了我希望能够得到的最终结果: Desired Result

注意,在这里,带有头骨的 png 比孩子的图像具有更大的暗度。需要保留 Alpha 通道。

编辑:通过示例更清晰

这是另一个desired result 在这里,png文件的侧面是不透明的,中间有一个透明的窗口,还有半透明的气泡。 JPG 文件只是来自相机的常规 JPG。

希望添加导致它的原始文件和徽标文件,但缺乏添加超过 2 个链接(或添加图像)的声誉

【问题讨论】:

    标签: imagemagick


    【解决方案1】:

    更新答案

    如果您拥有 ImageMagick 的 v7,您可以使用 -fx 在一行中为您完成数学运算,以确定两个图像中较大图像的尺寸:

    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) - 这是一个高大的蓝色矩形,周围有透明度,然后用黑色边框显示它的范围:

    你会运行这个,它实际上非常简单,但它充满了 cmets 和调试输出,所以你可以看到发生了什么:

    #!/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 作为命令行的最后一部分,以删除任何已添加的无关内容。

    【讨论】:

    • 太棒了!很简单。我在 Windows 上,所以阅读 wo ho
    【解决方案2】:

    尝试使用转换而不是复合。它比复合材料更灵活。

    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 不支持透明度。如果我发布的内容不符合您的要求,也许您可​​以发布一对输入和您想要的输出。

    【讨论】:

    • 谢谢!但不幸的是,这不起作用。 in_image.png 只是简单地粘贴在 logo.png 上。此外,如果 in_image.png 大于 logo.png - 生成的图像将被裁剪为 logo.png 暗淡(当然,由于粘贴的图像占据了 100% 的空间,logo.png 甚至在任何地方都不可见,它的已粘贴)
    • 无法编辑评论,但想澄清一下,我真的在寻找 logo.png 与 alpha 混合坐在 in_image.jpg 上,同时保留 logo.png 上的 alpha
    • 通过保留alpha,我的意思是最终的JPG将在JPG文件的顶部显示一个logo.png的覆盖,这样PNG文件的半透明区域就混合在JPG上,JPG显示通过清晰地显示在 PNG 为 100% 半透明且 JPG 被 PNG 上不透明的区域完全遮盖的区域。
    • 以后,请发布示例输入和输出图像。它可以帮助我们更好地了解您想要什么。
    • 我同意,用所有示例输入了整个电子邮件 - 但我的声誉限制了我发布链接或嵌入图像的能力。我只能用我的问题发布 2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多