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?


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

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.