【问题标题】:How to crop using a virtual canvas (trim result)?如何使用虚拟画布进行裁剪(修剪结果)?
【发布时间】:2016-05-19 14:33:13
【问题描述】:

我使用 ImageMagick trimmed 一张图片:

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 蒙版并将其与原始图像组合,但我不知道如何。

【问题讨论】:

    标签: canvas imagemagick crop


    【解决方案1】:

    更新答案

    经过反思,我认为您可能是这个意思,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
    

    原答案

    不确定您的意思是以下还是明确不是以下,但让我们试试看。

    假设你从这张图片开始:

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

    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:)
    

    现在,如果您还有这样的图像:

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

    convert other.png -crop $trim cropped.png
    

    【讨论】:

      【解决方案2】:

      使用 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”文件,但如果没有关于您的过程的更多细节,很难说如何。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        相关资源
        最近更新 更多