Como dividir uma imagem verticalmente usando a linha de comando?

19

Digamos que eu tenha uma imagem grande de 800 x 5000; como eu dividiria isso em 5 imagens separadas com dimensões 800x1000 usando a linha de comando?

shley
fonte
2
Por favor, não adicione a solução ao seu Q. Marque a resposta abaixo como aceita.
slm

Respostas:

27

Resolvido usando convert -crop geometry + repage:

convert -crop 100%x20% +repage image.png image.png
shley
fonte
Se você deseja aplicar isso a um lote de arquivos, tente o seguinte:ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
JPT
23

Usando o ImageMagick:

$ convert -crop 800x1000 image.png cropped_%d.png

Irá criar uma seqüência de arquivos chamados cropped_1.png, cropped_2.pnge assim por diante.

Referências

outlyer
fonte
O OP disse que isso resolveu usando convert -crop geometry +repage. Por exemplo: convert -crop 100%x20% +repage image.png image.png.
slm
1
+repage considerações sobre re: formatos compatíveis com deslocamento de imagem, etc.
Como isso se compara à resposta de @ shley?
CMCDragonkai 21/03
@CMCDragonkai é essencialmente o mesmo, eles estão usando porcentagens para dividir qualquer imagem de tamanho em 5 fatias verticais, em vez de serem escritas especificamente para o gabinete
800x5000
1

O ImageMagick trava em mim, porque a imagem é muito grande para ser manuseada, então tive que recorrer a outros métodos.

Acabei usando a Biblioteca de Imagens Python.

Segue uma resposta rápida e suja à pergunta do OP:

from PIL import Image

im = Image.open("YourImage.yourformat")

for h in range(0, im.height, 1000):
     nim = im.crop((0, h, im.width-1, min(im.height, h+1000)-1))
     nim.save("PartialImage." + str(h) + ".yourformat")

O código acima tem os tamanhos finais codificados, mas pode ser facilmente transformado em um script completo com suas entradas parametrizadas. Se alguém precisar de algo assim.

Fabio A.
fonte