Imagemagick 转换为命名图块,因为 row/column 不能按预期使用 -extent

Imagemagick convert to name tiles as row/column doesn't work as expected with -extent

我有一张 5120 × 4352 的图像,我将其裁剪成 2048x2048 的图块。我想将裁剪后的图块命名为

但是这个命令:

convert image.png -crop 2048x2048 -gravity northwest \ 
-extent 2048x2048 -transparent white  \ 
-set 'filename:tile' '%[fx:page.x/2048]_%[fx:page.y/2048]'  \ 
+repage +adjoin 'tile_%[filename:tile].png'

给我这个结果:

我怀疑这与最后一行和最后一列的图块不完全 2048x2048 有关,但 extent 命令使最终结果仍为 2048,但我如何将其用于图块和文件名?

我目前的解决方法是先像这样调整原始图像的大小,然后运行上面的命令:

convert image.png -gravity northwest \
-extent 2048x2048 -transparent white bigger.png

不过如果能一举完成就好了:)

使用 ImageMagick,您可以设置一个比输入图像刚好足够大的视口,以便它被 2048 等分。然后 no-op 扭曲会将视口放大到该大小。这样“-crop 2048x2048”将创建已经是 2048 平方的碎片。

这是我在 Windows 中编写的示例命令,我很确定我已将它翻译为可以作为 *nix 命令正常工作。

convert image.png \
   -set option:distort:viewport '%[fx:w-(w%2048)+2048]x%[fx:h-(h%2048)+2048]' \
   -virtual-pixel none -distort SRT 0 +repage -crop 2048x2048 \
   -set 'filename:tile' '%[fx:page.x/2048]_%[fx:page.y/2048]' \
   +repage +adjoin 'tile_%[filename:tile].png'

“-distort SRT”操作除了将视口扩展到除以 2048 的尺寸外什么都不做,其结果就像在裁剪之前执行“-extent”。而“-virtual-pixel none”将在溢出区域留下透明背景。

编辑添加:即使维度已经被 2048 整除,上述命令中用于扩展视口的公式将错误地添加另一个 2048 像素。如果维度小于 2048,它也会给出不正确的结果。考虑使用这样的公式来设置视口以处理这些条件...

'%[fx:w+(w%2048?2048-w%2048:0)]x%[fx:h+(h%2048?2048-h%2048:0)]'