如何使用虚拟 canvas(trim 结果)进行裁剪?
How to crop using a virtual canvas (trim result)?
我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
现在,我想使用 trim 找到的区域(从 381,273 开始的 264x468 像素区域)裁剪另一张图像(step2.png 的前身)。我如何以编程方式执行此操作,即不从 -identify
输出中复制粘贴 381,273 等?
我的想法是制作 step3.png 的 alpha 蒙版并将其与原始图像合成,但我不知道该怎么做。
更新答案
经过深思熟虑,我想你可能是这个意思,其中 other.png
得到 trimmed 以匹配 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
原答案
不确定您的意思是以下还是明确不是以下,但让我们试试看。
假设您从这张图片开始:
并且您想 trim 离开红色,并找到内部蓝色区域的位置。你可以这样做:
convert image.png -trim trimmed.png
你会得到一个蓝色的 400x200 图像,从左上角偏移 80,80。与其这样做,不如让 ImageMagick 告诉你它会 trim 不这样做,使用 -format %@
像这样:
convert image.png -format "%@" info:
400x200+80+80
因此,您将像这样捕获它:
trim=$(convert image.png -format"%@" info:)
现在,如果您有另一张这样的图片:
您可以 trim 它使用与您想要从原始图像 trim 相同的区域,如下所示:
convert other.png -crop $trim cropped.png
使用 ImageMagick 7+,您可以通过存储一个图像的大小并将其用作另一个图像的 trim 大小来使用 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
老实说,您也可以消除大部分或全部中间 "step x" 文件,但如果没有关于您的过程的更多细节,很难说如何。
我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
现在,我想使用 trim 找到的区域(从 381,273 开始的 264x468 像素区域)裁剪另一张图像(step2.png 的前身)。我如何以编程方式执行此操作,即不从 -identify
输出中复制粘贴 381,273 等?
我的想法是制作 step3.png 的 alpha 蒙版并将其与原始图像合成,但我不知道该怎么做。
更新答案
经过深思熟虑,我想你可能是这个意思,其中 other.png
得到 trimmed 以匹配 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
原答案
不确定您的意思是以下还是明确不是以下,但让我们试试看。
假设您从这张图片开始:
并且您想 trim 离开红色,并找到内部蓝色区域的位置。你可以这样做:
convert image.png -trim trimmed.png
你会得到一个蓝色的 400x200 图像,从左上角偏移 80,80。与其这样做,不如让 ImageMagick 告诉你它会 trim 不这样做,使用 -format %@
像这样:
convert image.png -format "%@" info:
400x200+80+80
因此,您将像这样捕获它:
trim=$(convert image.png -format"%@" info:)
现在,如果您有另一张这样的图片:
您可以 trim 它使用与您想要从原始图像 trim 相同的区域,如下所示:
convert other.png -crop $trim cropped.png
使用 ImageMagick 7+,您可以通过存储一个图像的大小并将其用作另一个图像的 trim 大小来使用 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
老实说,您也可以消除大部分或全部中间 "step x" 文件,但如果没有关于您的过程的更多细节,很难说如何。