Imagemagick 转换为命名图块,因为 row/column 不能按预期使用 -extent
Imagemagick convert to name tiles as row/column doesn't work as expected with -extent
我有一张 5120 × 4352 的图像,我将其裁剪成 2048x2048 的图块。我想将裁剪后的图块命名为
- tile_0_0.png
- tile_0_1.png
- tile_0_2.png
- tile_1_0.png
- tile_1_1.png
- tile_1_2.png
- ...
但是这个命令:
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'
给我这个结果:
- tile_0_0.png
- tile_0_1.png
- tile_0_16.png
- tile_1_0.png
- tile_1_1.png
- tile_1_16.png
- tile_4_0.png
- tile_4_1.png
- tile_4_16.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)]'
我有一张 5120 × 4352 的图像,我将其裁剪成 2048x2048 的图块。我想将裁剪后的图块命名为
- tile_0_0.png
- tile_0_1.png
- tile_0_2.png
- tile_1_0.png
- tile_1_1.png
- tile_1_2.png
- ...
但是这个命令:
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'
给我这个结果:
- tile_0_0.png
- tile_0_1.png
- tile_0_16.png
- tile_1_0.png
- tile_1_1.png
- tile_1_16.png
- tile_4_0.png
- tile_4_1.png
- tile_4_16.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)]'