使用 ImageMagick 扩展带有颜色的透明图像

Extent transparent image with color using ImageMagick

我想使用以下命令行扩展带有(例如)红色边框的图像:

convert input.png -gravity center -background red -extent 1000x1000 output.png

只要 input.png 不包含任何透明区域,此方法就有效。

如果是这样,这些也将被背景色替换。我在文档中读到这是预期的行为,解决方案是删除背景颜色(我不能这样做,因为我希望有彩色边框)或使用 alpha 合成器(我无法理解)出正确的那个)。

如何使用颜色扩展图像但仅将颜色应用到扩展区域而不是原始图像本身?

编辑: 根据 compose 参数的描述,我认为它应该与

一起使用
-compose src-in

但事实并非如此。

尝试在扩展图像的第一个像素处绘制颜色。

convert input.png -gravity center \
             -extent 1000x1000 \
             -fill red \
             -draw 'color 0,0 floodfill' \
             output.png

编辑

另一种方法是 "bleed" 超出预期范围的边界。这是打印中的常用技巧,知道多余边框的作品会被忽略。

convert input.png \
             -mattecolor red \
             -frame 1000x1000+0+0 \
             -gravity Center \
             -extent 1000x1000 \
             output.png

我可以给你你想要的,但我怀疑这个方法有点笨拙,所以我会继续思考并提醒我们的常驻专家@KurtPfeifle,他无所不知 ImageMagick....

同时,我的想法是创建扩展的红色背景,在其中打一个与原始图像大小相同的透明孔,然后覆盖原始图像,例如这个:

convert -size 1000x1000 xc:red                                                      \
        -size 800x800   xc:none -alpha set -gravity center -compose copy -composite \
        image.png -composite result.png

第一行创建红色背景,第二行打出一个与原始图像大小相同的透明孔 (800x800),第三行将原始图像复制到透明孔中。

如果您使用的是 bash,您可以像这样从原始图像中获取几何图形:

#!/bin/bash
geom=$(convert image.png -format "%wx%h" info:)
convert -size 1000x1000 xc:red                                                  \
        -size $geom xc:none -alpha set -gravity center -compose copy -composite \
        image.png -composite result.png

所以,如果我从这个开始

我最终得到这个