我想使用此命令行扩展带有(例如)红色边框的图像:
convert input.png -gravity center -background red -extent 1000x1000 output.png
只要input.png不包含任何透明区域,这都有效。
如果确实如此,它们也会被背景颜色取代。我在文档中读到这是预期的行为,解决方案是删除背景颜色(我不能,因为我想要有彩色边框)或使用alpha合成器(我无法想象)出正确的一个)。
如何使用颜色扩展图像,但仅将颜色应用于扩展区域而不是原始图像本身?
修改 根据compose参数的描述,我认为它应该与
一起使用-compose src-in
但事实并非如此。
答案 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
所以,如果我从这个开始
我最终得到了这个
答案 1 :(得分:0)
尝试在展开图像的第一个像素处绘制颜色。
convert input.png -gravity center \
-extent 1000x1000 \
-fill red \
-draw 'color 0,0 floodfill' \
output.png
另一种方法是在预期范围范围内“出血”边界。这是印刷中的常用技术,并且知道额外边界的工作将被忽略。
convert input.png \
-mattecolor red \
-frame 1000x1000+0+0 \
-gravity Center \
-extent 1000x1000 \
output.png