use*_*622 2 image-manipulation split
我有一个图像如下。它是 2579*2388 像素。让我们假设它的左下角是 0,0。从该图像我想创建多个图像如下并将它们保存在工作文件夹中。每个图像的大小为 100*100 像素。每个图像将通过它的左下角坐标保存。
最快的方法是什么?我更喜欢命令行方法。但首先,我可以使用任何类型的工具。
我知道在当前图像的情况下,它会将其拆分为大约 257*238 个图像。但是我有足够的磁盘空间,我需要每个图像来执行文本检测。
这是可以执行您想要的操作的shell 代码(bash
、ksh
、 或zsh
):
image=clock.jpg
size=$( identify -ping -format "%wx%h" "${image}" )
x_upb=${size%x*}
y_upb=${size#*x}
x_inc=10
y_inc=10
x_tile=100
y_tile=100
for ((x=0; x<x_upb; x+=x_inc))
do
for ((y=0; y<y_upb; y+=y_inc))
do
convert "${image}" -crop "${x_tile}x${y_tile}+${x}+${y}" "$x-$y.jpg"
done
done
Run Code Online (Sandbox Code Playgroud)
该程序convert
来自 ImageMagick 程序套件。由于还可以从图片文件中自动提取图片大小,因此我也添加了该步骤。按照 don_crissti 的评论,我也建议identify
为此目的使用(它也很方便,来自 ImageMagick 程序套件)。您当然也可以在x_upb
和 中对图片大小进行硬编码y_upb
,还可以根据需要调整平铺大小和平铺移位增量。我希望并认为代码是不言自明的。
注意:它当然需要一些调整;例如,图块可能不会超出上限(或者,如果靠近边界,您会得到较小的子图片),因此如果您想要相等,则需要从上限中减去图块大小 -整个图像中大小的子图像。
注意:据我所知,“几何”被定义为从左上角的 (0,0) 开始的方向。如果您想要一些其他方向,您需要自己进行数学计算以适应该接口定义。对于通常的代码图案为取决于解决各坐标的上限,例如$((y_upb - y))
,分别y
将所述变体的一部分,(环- )变量。