修剪图像背景,但在Graphicsmagick中保留填充


Trim image background but leave padding in Graphicsmagick

我在php中汇编Graphicsmagick命令,然后使用exec()调用它们。我需要修剪图像,但保留20个像素的填充。所以我想做以下事情:

exec('gm convert input.jpg -trim -bordercolor white -border 20x20 output.jpg');

但是使用修剪过的颜色而不是白色。如何做到这一点?

这对我有用。

gm convert input.jpg -crop 1x1+0+0 corner.txt
color=`sed -e "s/.* #/#/" corner.txt`
gm convert input.jpg -trim -bordercolor $color -border 20x20 output.jpg

GraphicsMagick中的txt格式没有标题(与ImageMagick不同),因此(0,0)像素位于第一行(实际上是1x1图像的唯一一行)。1x1裁剪图像的corner.txt文件如下:

0,0: (255,255,255) #FFFFFF

在我的测试图像中,它碰巧是白色的,但它将是(0,0)像素的任何颜色。

目前GraphicsMagick似乎不可能做到这一点(在撰写本文时:GM v1.4测试版)。

在ImageMagick中,这是可以做到的,因为IM提供了一个fx命令来采样给定像素的颜色值:

convert myimage.png -format '%[fx:p{10,20}]' info:

这将返回位置x=10,y=20处的像素的颜色值。然后可以在随后的IM命令中使用该输出来添加该颜色的边界。