使用 ImageMagick(图像裁剪语法)从其他部分组装图像

Posted

技术标签:

【中文标题】使用 ImageMagick(图像裁剪语法)从其他部分组装图像【英文标题】:Assembling an image from parts of others with ImageMagick (image crop syntax) 【发布时间】:2016-12-30 15:29:59 【问题描述】:

我有一组源 PNG 图像,我想使用其中的一部分来组装最终的 PNG 图像。这些部分是矩形的,从不与目的地重叠,但大小不同。有时它是整个源图像,有时只是一个子部分。我想多次编辑源代码,每次都重新组装最终的图像,所以我尝试使用 sh 和 Imagemagick 编写脚本。

我试过了

convert \
-size 512x512 null:\
-page +96+32 source_a.png\
-page +96+0 source_b.png[32x32+16+16]  \
-background transparent\
-layers merge\
destination.png

(仅使用两个源图像进行说明) 我想要所有的source_a.png 和一块source_b.png。第一个没问题,但是在source_b.png 上使用“内联裁剪”语法会给我一个错误:

convert: geometry does not contain image `source_b.png' @ warning/transform.c/CropImage/666.

图片足够大:

$ identify source_b.png
source_b.png PNG 64x48 64x48+0+0 8-bit sRGB 3.7KB 0.000u 0:00.000

最好的方法是什么?我在 MacOS 10.12 上使用 ImageMagick 6.9.7-0 Q16

【问题讨论】:

【参考方案1】:

另一种方法可能是使用-geometry-composte 来达到相同的效果:

convert -size 512x512 xc:white                            \
    source_a.png              -geometry +96+32 -composite \
    source_b.png[32x32+16+16] -geometry +96+0  -composite \
    result.png

【讨论】:

哇!更清洁的解决方案【参考方案2】:

PNG 将保留分页免于内联裁剪,因此添加的页面将通过 ROI 超出范围。我想-repage 内联裁剪然后尝试清除以前的分页并设置新页面会更简单。

convert -size 512x512 null: \
        -page +96+32 source_a.png \
        \( source_b.png[32x32+16+16] -repage +96+0 \) \
        -background transparent\
        -layers merge\
        destination.png

【讨论】:

以上是关于使用 ImageMagick(图像裁剪语法)从其他部分组装图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageMagick 调整大小,然后从命令行裁剪图像

如何使用 ImageMagick 从文件夹中每个 JPG 图像的底部裁剪 486 像素?

ImageMagick 基于矩形边框颜色裁剪图像

使用 imagemagick linux 脚本裁剪图像不起作用

使用imagemagick linux脚本裁剪图像不起作用

使用 Jcrop 和 Imagemagick 裁剪图像