0

我知道使用 ImageMagick,我们可以将图像裁剪为其“子图像”(或图块)。

现在,假设我的图像宽度为 480 像素(高度可变)。

使用此命令,我能够成功裁剪它:

convert initial.png -crop 480x300 tiles.png

这会导致各种tiles_0.png,tiles_1.png等 - 由 480px 宽度的子图块组成。

然而,这里有一个问题:该命令返回所有 480x300 像素的图块(从上到下,因为它们是可用的),但也返回最后一个图块,很明显 - 不能具有相同的高度(通常小于 300 像素)。


我如何改写命令,使其只输出给定尺寸的瓷砖,而不是最后一个?

4

1 回答 1

0

您可以使用 ImageMagick 的fx函数来计算在进行平铺之前需要将底部切掉多少。例如,mod 运算符会告诉您当您将图像高度除以平铺高度 (300) 时剩下的内容,如下所示:

# First create an arbitrary image 929 px high
convert -size 480x929 xc:blue initial.png

# Now see what we need to chop off
convert initial.png -format "%[fx:h%300]" info:
29

因此,我们需要使用 this 作为参数从底部移除 29 个像素,-chop如果我们指定 ,它将从底部切掉-gravity south。现在,这一切都可以在一个命令中完成,如下所示:

convert initial.png                                           \
   -gravity south                                             \
   -chop 0x$(convert initial.png -format "%[fx:h%300]" info:) \
   -crop 480x300 +repage tile.png

这将为您提供 3 个每个 300 像素高的图块:

identify tile*
tile-0.png PNG 480x300 480x300+0+0 8-bit sRGB 2c 286B 0.000u 0:00.000
tile-1.png[1] PNG 480x300 480x300+0+0 8-bit sRGB 2c 286B 0.000u 0:00.000
tile-2.png[2] PNG 480x300 480x300+0+0 8-bit sRGB 2c 286B 0.000u 0:00.000
于 2014-12-31T14:32:23.527 回答