【问题标题】:ImageMagick: crop but keep original canvas size and paint background whiteImageMagick:裁剪但保持原始画布大小并将背景绘制为白色
【发布时间】:2020-01-08 13:44:58
【问题描述】:

我想将图像裁剪成大小相等的图块,但不是通过将它们分开,而是通过生成子图像,其中仅保留原始图像的裁剪区域,其余部分涂成白色。原始画布大小保持不变。

通过阅读手册here in specific,我认为我可以通过运行轻松获得相同大小的图块:

convert image.jpg -crop 7x6@ +repage +adjoin image_7x6_%d.jpg

然而,这给了我更小的图像。我在 imagemagick board a post 上找到了建议将外部涂成白色是可行的,但我还没有弄清楚该使用哪个命令来使其正常工作。

有谁知道如何做到这一点?

【问题讨论】:

    标签: imagemagick image-manipulation imagemagick-convert


    【解决方案1】:

    您可以在 Windows 或 *nix 上使用 ImageMagick v6 或 v7 在单个命令中完成此操作,而无需使用这样的命令编写任何中间文件...

    convert image.jpg -fill white \
       \( +clone -colorize 100 -write mpr:bg +delete \) \
       -crop 7x6@ -set geometry +%[fx:s.page.x]+%[fx:s.page.y] \
       mpr:bg null: +insert +insert -layers composite image_7x6_%d.jpg
    

    这是使用 IM v6 的 *nix shell 语法。对于 Windows,将续行的反斜杠“\”更改为插入符号“^”,并从括号“(...)”中删除反斜杠转义符“\(...\)”。

    对于 IM v7,将“convert”更改为“magick”。

    编辑添加:正如 Fred 在下面的评论中指出的那样,裁剪后的部分已经包含它们在画布上的原始位置的几何形状。该命令可以简化为更像这样的东西......

    convert image.jpg \
       \( +clone -fill white -colorize 100 -write mpr:bg +delete \) \
       -crop 7x6@ mpr:bg null: +insert +insert -layers composite image_7x6_%d.jpg
    

    【讨论】:

    • 巧妙地使用 +insert 两次旋转图像序列。我曾尝试做类似的事情,但没有 +inserts 它失败了。但是,您的命令不需要 -set geometry ...。这在我的 Mac 上对我来说很好:convert lena.jpg \( +clone -fill white -colorize 100 -write mpr:bg +delete \) -crop 2x2@ mpr:bg null: +insert +insert -layers composite image_7x6_%d.jpg
    【解决方案2】:

    这是一种将图像的其余部分实际绘制成颜色的方法。您要求白色,但出于显示目的,我将使用蓝色。

    这里我用一些 Unix shell 脚本来做。

    First, crop the image, but do not add +repage or that will remove the virtual canvas.
    
    Save the images as MIFF (or PNG) to preserve the virtual canvas.
    
    Then loop over each one as flatten against your color.
    
    Then remove all the MIFF files.
    


    输入:

    convert lena.png -crop 2x2@ +adjoin lena_%02d.miff
    for img in *.miff; do
    name=$(convert $img -format %t info:)
    convert $img -background blue -flatten $name.jpg
    done
    rm -f *.miff
    


    【讨论】:

    • 很好的答案。适用于任意数量的瓷砖。
    【解决方案3】:

    如果您平铺图像并将平铺保存为 PNG 文件,它们将“记住”它们以前在虚拟画布上的位置,因此您可以简单地将它们放回相同大小的白色画布上.

    convert -size 160x100 xc:red -crop 2x2@ frame-%d.png
    

    现在看看图块,特别是第 4 列:

    identify fra*.png
    frame-0.png PNG 80x50 160x100+0+0 8-bit sRGB 2c 308B 0.000u 0:00.000
    frame-1.png PNG 80x50 160x100+80+0 8-bit sRGB 2c 308B 0.000u 0:00.000
    frame-2.png PNG 80x50 160x100+0+50 8-bit sRGB 2c 308B 0.000u 0:00.000
    frame-3.png PNG 80x50 160x100+80+50 8-bit sRGB 2c 308B 0.000u 0:00.000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2012-12-15
      • 1970-01-01
      • 2019-01-11
      • 2018-03-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      相关资源
      最近更新 更多