使用ImageMagick的颜色范围透明图像

时间:2015-03-25 20:16:25

标签: image background resize imagemagick

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

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

只要input.png不包含任何透明区域,这都有效。

如果确实如此,它们也会被背景颜色取代。我在文档中读到这是预期的行为,解决方案是删除背景颜色(我不能,因为我想要有彩色边框)或使用alpha合成器(我无法想象)出正确的一个)。

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

修改 根据compose参数的描述,我认为它应该与

一起使用
-compose src-in

但事实并非如此。

2 个答案:

答案 0 :(得分:3)

我可以得到你想要的东西,但我怀疑这种方法有点笨拙,所以我会继续思考并提醒我们的常驻专家@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

所以,如果我从这个开始

enter image description here

我最终得到了这个

enter image description here

答案 1 :(得分:0)

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

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

draw color

修改

另一种方法是在预期范围范围内“出血”边界。这是印刷中的常用技术,并且知道额外边界的工作将被忽略。

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

frame