Aqui está o código do shell ( bash
, ksh
ou zsh
) que pode fazer o que você deseja:
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
O programa convert
é do pacote de programas do ImageMagick. Como também é possível extrair automaticamente o tamanho da imagem dos arquivos de imagem, também adicionei essa etapa. Seguindo o comentário de don_crissti, também estou propondo o uso de identify
para esse propósito (também é conveniente, a partir do conjunto de programas ImageMagick). É claro que você também pode codificar o tamanho da imagem em x_upb
e y_upb
e também ajustar o tamanho do ladrilho e o incremento de mudança de ladrilho conforme necessário. Espero e acho que o código é auto-explicativo.
Nota: certamente precisa de alguns ajustes; por exemplo. as peças provavelmente não vão além dos limites superiores (ou você obterá sub-fotos menores se você estiver perto das bordas), então você precisaria subtrair o tamanho do ladrilho dos limites superiores se quisesse tamanhos iguais sub-imagens em toda a imagem.
Nota: Tanto quanto me lembro, a 'geometria' é definida para ter uma orientação começando com (0,0) no canto superior esquerdo. Se você quiser alguma outra orientação, precisará fazer as contas para se encaixar nessa definição de interface. Os padrões de código habituais para isso são endereçar as respectivas coordenadas dependendo do limite superior, por exemplo, $((y_upb - y))
, onde y
seria a parte variante, a variável (loop-).