我知道使用ImageMagick,我们可以将图像裁剪为“子图像”(或图块)。
现在,假设我的图像宽度为480像素(高度可变)。
使用此命令,我可以成功裁剪它:
convert initial.png -crop 480x300 tiles.png
哪种结果导致各种tiles_0.png
,tiles_1.png
等 - 包含宽度为480像素的子图块。
然而,这里有一个问题:该命令返回所有480x300px图块(从上到下,因为它们可用),但也返回最后一个图块,非常明显地 - 它不能具有相同的高度(通常是小于300px)。
我怎么能改写命令,使它只输出给定的精确尺寸的瓷砖,而不是最后一个?
答案 0 :(得分: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
因此,我们需要使用此作为-chop
的参数从底部删除29个像素,如果我们指定-gravity south
,它将从底部删除。现在可以在一个命令中完成,如下所示:
convert initial.png \
-gravity south \
-chop 0x$(convert initial.png -format "%[fx:h%300]" info:) \
-crop 480x300 +repage tile.png
这将为您提供3个瓷砖,每个300 px高:
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