Imagemagick转换为名称图块,因为使用-extent时行/列无法正常工作

时间:2019-05-08 19:59:04

标签: imagemagick crop imagemagick-convert

我有一张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有关,但是range命令使最终结果仍为2048,但是如何将其与图块和文件名一起使用?

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

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

但是一口气完成它就很好了:)

1 个答案:

答案 0 :(得分:1)

使用ImageMagick,可以将视口设置为刚好大于输入图像的视口,以便将视口平均分割为2048。然后,无操作失真将视口放大到该大小。这样,“-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'

“扭曲SRT”操作除了将视口扩展为均匀划分为2048的尺寸外,什么都不做,结果就像在裁剪之前进行“扩展”一样。而“-虚拟像素无”将在溢出区域保留透明背景。

编辑后添加:即使尺寸已被2048整除,上述命令中用于扩展视口的公式也将错误地添加另外2048个像素。如果尺寸小于2048,也会产生错误的结果。请考虑使用像这样的公式,用于设置视口以处理这些条件...

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