Wie kann ich ein Bild vertikal über die Befehlszeile teilen?

19

Angenommen, ich habe ein großes 800x5000-Bild. Wie würde ich das über die Befehlszeile in 5 separate Bilder mit den Abmessungen 800x1000 aufteilen?

shley
quelle
2
Bitte fügen Sie die Lösung nicht zu Ihrer Frage hinzu. Markieren Sie die unten stehende Antwort als akzeptiert.
slm

Antworten:

27

Gelöst mit konvertieren-Crop Geometrie + Repage:

convert -crop 100%x20% +repage image.png image.png
shley
quelle
Wenn Sie dies auf einen Stapel von Dateien anwenden möchten, versuchen Sie ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
Folgendes
23

Verwendung von ImageMagick:

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

Wird eine Folge von Dateien mit dem Namen erstellen cropped_1.png, cropped_2.pngund so weiter.

Verweise

outlyer
quelle
Das OP sagte, dass dies mit gelöst wurde convert -crop geometry +repage. Zum Beispiel: convert -crop 100%x20% +repage image.png image.png.
slm
1
+repage Überlegungen zu : Bild-Offset-fähigen Formaten usw.
Wie ist das mit der Antwort von @ shley zu vergleichen?
CMCDragonkai
@CMCDragonkai es ist im Wesentlichen das gleiche, sie verwenden Prozentsätze, so dass es jedes Bild in 5 vertikale Schichten aufteilt, anstatt speziell für den 800x5000-Fall geschrieben zu werden
outlyer
1

ImageMagick stürzte bei mir ab, da das Bild zu groß war, um es verarbeiten zu können, und ich musste auf andere Methoden zurückgreifen.

Am Ende habe ich die Python-Bildbibliothek verwendet.

Es folgt eine schnelle und schmutzige Antwort auf die OP-Frage:

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")

Der obige Code hat die endgültigen Größen fest codiert, kann jedoch leicht in ein eigenes vollständiges Skript umgewandelt werden, bei dem alle Eingaben parametriert sind. Wenn man so etwas jemals braucht.

Fabio A.
quelle