Как разделить изображение по вертикали с помощью командной строки?

19

Скажем, у меня есть большое изображение 800x5000; Как бы я разделить это на 5 отдельных изображений с размерами 800x1000 с помощью командной строки?

shley
источник
2
Пожалуйста, не добавляйте решение в свой вопрос. Отметьте ответ ниже как принятый.
SLM

Ответы:

27

Решил это с помощью convert -crop geometry + repage:

convert -crop 100%x20% +repage image.png image.png
shley
источник
Если вы хотите применить это к пакету файлов, попробуйте это:ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
JPT
23

Использование ImageMagick:

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

Будет ли создать последовательность файлов с именем cropped_1.png, cropped_2.pngи так далее.

Ссылки

outlyer
источник
ОП сказал, что это решено с помощью convert -crop geometry +repage. Например: convert -crop 100%x20% +repage image.png image.png.
SLM
1
+repage соображения : форматы, поддерживающие смещение изображения и т. д.
Как это соотносится с ответом @ shley?
CMCDragonkai
@CMCDragonkai, по сути, это то же самое, они используют проценты, поэтому оно будет разбивать изображение любого размера на 5 вертикальных срезов вместо того, чтобы записываться специально для случая
800x5000
1

ImageMagick обрушился бы на меня, потому что изображение было слишком большим для его обработки, поэтому мне пришлось прибегнуть к другим методам.

В итоге я использовал библиотеку изображений Python.

Вот быстрый и грязный ответ на вопрос ОП:

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

Приведенный выше код имеет окончательные размеры, жестко запрограммированные, но его можно легко преобразовать в собственный скрипт полного удара со всеми параметризованными входами. Если когда-нибудь понадобится такая вещь.

Фабио А.
источник