如何使用 imageMagick 缝合裁剪的图像?

Posted

技术标签:

【中文标题】如何使用 imageMagick 缝合裁剪的图像?【英文标题】:How to stitch back cropped image with imageMagick? 【发布时间】:2016-12-13 10:27:45 【问题描述】:

我有一个很大的图像,我们将其命名为 orig-image.tiff。 我想把它剪成小块,在上面涂上东西,然后将新创建的小图像缝合在一起。

我用这个命令把它切成小块:

convert orig-image.tiff -crop 400x400 crop/parts-%04d.tiff

然后我将通过对每个 part-XXXX.tiff 图像应用处理来生成许多图像,并最终得到从 part-0000.png 到 part-2771.png 的图像

现在我想将图像拼接成一个大的。 imagemagick 能做到吗?

【问题讨论】:

我目前无法测试,但您的图块可能仍保留在画布上的原始位置。尝试使用 convert part-0000.png part-0001.png -layers merge output.png 之类的测试 【参考方案1】:

如果您使用的是 PNG 格式,则图块会“记住”它们的原始位置,正如 @Bonzo 建议的那样,您可以像这样将它们拆开并重新组装:

# Make 256x256 black-red gradient and chop into 1024 tiles of 8x8 as PNGs
convert -size 256x256 gradient:red-black -crop 8x8 tile-%04d.png

然后重新组装:

convert tile*png -layers merge BigBoy.png

这是因为图块“记住”它们在画布上的原始位置 - 例如+248+248下方:

identify tile-1023.png
tile-1023.png PNG 8x8 256x256+248+248 16-bit sRGB 319B 0.000u 0:00.000

使用 TIF,您可以:

# Make 256x256 black-red gradient and chop into 1024 tiles of 8x8 as TIFs
convert -size 256x256 gradient:red-black -crop 8x8 tile-%04d.tif

并使用以下内容重新组合,但遗憾的是您需要知道原始图像的布局:

montage -geometry +0+0 -tile 32x32 tile*tif BigBoy.tif


关于下面 Glenn 的评论,这里是 pngcheck 的输出,显示了 “remembered” 偏移量:

pngcheck tile-1023*png

输出

OK: tile-1023.png (8x8, 48-bit RGB, non-interlaced, 16.9%).
iMac:~/tmp: pngcheck -v tile-1023*png
File: tile-1023.png (319 bytes)
  chunk IHDR at offset 0x0000c, length 13
    8 x 8 image, 48-bit RGB, non-interlaced
  chunk gAMA at offset 0x00025, length 4: 0.45455
  chunk cHRM at offset 0x00035, length 32
    White x = 0.3127 y = 0.329,  Red x = 0.64 y = 0.33
    Green x = 0.3 y = 0.6,  Blue x = 0.15 y = 0.06
  chunk bKGD at offset 0x00061, length 6
    red = 0xffff, green = 0xffff, blue = 0xffff
  chunk oFFs at offset 0x00073, length 9: 248x248 pixels offset
  chunk tIME at offset 0x00088, length 7: 13 Dec 2016 15:31:10 UTC
  chunk vpAg at offset 0x0009b, length 9
    unknown private, ancillary, safe-to-copy chunk
  chunk IDAT at offset 0x000b0, length 25
    zlib: deflated, 512-byte window, maximum compression
  chunk tEXt at offset 0x000d5, length 37, keyword: date:create
  chunk tEXt at offset 0x00106, length 37, keyword: date:modify
  chunk IEND at offset 0x00137, length 0
No errors detected in tile-1023.png (11 chunks, 16.9% compression).

【讨论】:

如果您对瓦片如何“记住”它们的位置感到好奇,它包含在 PNG oFFs(“偏移”)和 vpAg(“虚拟页面”)块中。 oFFs 块在 PNG 扩展规范中定义,而 vpAg 块是为 ImageMagick 发明的私有块。如果您使用 ImageMagick “-strip” 选项编写 PNG 文件,则这些块会从输出中省略,并且位置会被遗忘。 @GlennRanders-Pehrson 非常感谢您的解释 - 如果其他人有兴趣,请运行 pngcheck -v SomeFile.png 以查看这些块。

以上是关于如何使用 imageMagick 缝合裁剪的图像?的主要内容,如果未能解决你的问题,请参考以下文章

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

ImageMagick:转换、裁剪、调整大图像

ImageMagick:如何将图像最小化为特定宽高比?

使用 Imagemagick 从图像中自动裁剪文本(签名)并更改背景颜色

使用 Jcrop 和 Imagemagick 裁剪图像

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