Jak podzielić obraz pionowo za pomocą wiersza poleceń?

19

Powiedzmy, że mam duży obraz 800 x 5000; jak podzieliłbym to na 5 osobnych obrazów o wymiarach 800 x 1000 za pomocą wiersza polecenia?

Shley
źródło
2
Nie dodawaj rozwiązania do pytania. Oznacz odpowiedź poniżej jako zaakceptowaną.
slm

Odpowiedzi:

27

Rozwiązano go za pomocą konwersji geometrii przycięcia + repage:

convert -crop 100%x20% +repage image.png image.png
Shley
źródło
Jeśli chcesz zastosować to do partii plików, spróbuj tego:ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
JPT
23

Korzystanie z ImageMagick:

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

Będą tworzyć sekwencję plików o nazwach cropped_1.png, cropped_2.pngi tak dalej.

Bibliografia

outlyer
źródło
OP powiedział, że rozwiązało to za pomocą convert -crop geometry +repage. Na przykład: convert -crop 100%x20% +repage image.png image.png.
slm
1
+repage uwagi dotyczące: formaty zdolne do kompensacji obrazu itp.
Jak to się ma do odpowiedzi @ shley?
CMCDragonkai
@CMCDragonkai jest zasadniczo taki sam, używają wartości procentowych, więc podzieli dowolny rozmiar obrazu na 5 pionowych plasterków zamiast pisać specjalnie dla przypadku
800x5000
1

ImageMagick zawalił się na mnie, ponieważ obraz był zbyt duży, aby go obsłużyć, więc musiałem skorzystać z innych metod.

Skończyło się na użyciu biblioteki obrazów Python.

Szybka i brudna odpowiedź na pytanie PO jest następująca:

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

Powyższy kod ma ostateczne rozmiary zakodowane na stałe, ale można go łatwo przekształcić we własny skrypt pełnego rozdmuchu ze sparametryzowanymi wszystkimi danymi wejściowymi. Jeśli ktoś czegoś potrzebuje.

Fabio A.
źródło