¿Cómo dividir una imagen verticalmente usando la línea de comando?

19

Digamos que tengo una imagen grande de 800x5000; ¿Cómo dividiría eso en 5 imágenes separadas con dimensiones de 800x1000 usando la línea de comando?

shley
fuente
2
No agregue la solución a su Q. Marque la respuesta a continuación como aceptada.
slm

Respuestas:

27

Lo resolvió usando convert -crop geometry + repage:

convert -crop 100%x20% +repage image.png image.png
shley
fuente
Si desea aplicar esto a un lote de archivos, intente esto:ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
JPT
23

Usando ImageMagick:

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

Creará una secuencia de archivos nombrados cropped_1.png, cropped_2.pngy así sucesivamente.

Referencias

outlyer
fuente
El OP dijo que esto lo resolvió usando convert -crop geometry +repage. Por ejemplo: convert -crop 100%x20% +repage image.png image.png.
slm
1
+repage consideraciones re: offset formatos de imagen capaces etc.
¿Cómo se compara esto con la respuesta de @ shley?
CMCDragonkai
@CMCDragonkai es esencialmente lo mismo, están utilizando porcentajes, por lo que dividirá cualquier imagen de tamaño en 5 sectores verticales en lugar de estar escrito específicamente para el caso de
800x5000
1

ImageMagick se estrellaría conmigo, ya que la imagen es demasiado grande para poder manejarla, así que tuve que recurrir a otros métodos.

Terminé usando la biblioteca de imágenes de Python.

Sigue una respuesta rápida y sucia a la pregunta de 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")

El código anterior tiene los tamaños finales codificados, pero se puede transformar fácilmente en un script completo con todas las entradas parametrizadas. Si alguien alguna vez necesita tal cosa.

Fabio A.
fuente