如何使用虚拟画布裁剪(修剪结果)?

时间:2016-02-09 14:44:35

标签: canvas imagemagick crop

trim使用ImageMagick来识别图像:

step2.png[0] PNG 1200x1200=>264x468 1200x1200+381+273 8-bit sRGB 0.031u 0:00.014
step3.png[0] PNG 264x468 1200x1200+381+273 8-bit sRGB 31.8KB 0.000u 0:00.000

现在,我想使用修剪区域(从381,273开始的264x468像素区域)来裁剪另一个图像(step2.png的前身)。如何以编程方式执行此操作,即不从-identify输出中复制粘贴381,273等?

我的想法是制作step3.png的alpha蒙版并将其与原始图像合成,但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:2)

更新了答案

经过反思,我认为你的意思是这个,other.png被修剪以匹配trimmed_orig.png

composite -compose src other.png trimmed_orig.png trimmed_other.png

图像是这样的:

identify other.png trimmed_orig.png trimmed_other.png

other.png PNG 560x360 560x360+0+0 8-bit sRGB 2c 312B 0.000u 0:00.000
trimmed_orig.png PNG 400x200 560x360+80+80 8-bit sRGB 2c 340B 0.000u 0:00.000
trimmed_other.png PNG 400x200 560x360+80+80 8-bit sRGB 2c 340B 0.000u 0:00.000

原始答案

不确定您是指以下内容还是明确指出以下内容,但让我们试试看。

假设您从这张图片开始:

enter image description here

你要剪掉红色,找到内部蓝色区域的位置。你可以这样做:

convert image.png -trim trimmed.png

你会从左上角得到一个蓝色的400x200图像偏移80,80。不过这样做,你可以让ImageMagick在没有这样做的情况下告诉你它会修剪它,使用-format %@这样:

convert image.png -format "%@" info:
400x200+80+80

所以,你会这样捕获:

trim=$(convert image.png -format"%@" info:)

现在,如果你有另一张这样的图像:

enter image description here

您可以使用与原始图像相同的区域修剪它,如下所示:

convert other.png -crop $trim cropped.png

enter image description here

答案 1 :(得分:0)

使用ImageMagick 7+,您可以通过隐藏一个图像的大小并将其用作另一个图像的修剪大小,使用fx表达式轻松完成此操作:

magick \( \
    step3.png -set option:trimzone "%[fx:w]x%[fx:h]+%[fx:page.x]+%[fx:page.y]" +delete \
    \) other_image.png -crop %[trimzone] output.png

老实说,你可以消除你的大部分或全部中级"步骤x"文件也是如此,但如果没有关于流程的更多详细信息,则很难说明如何。