Объедините несколько изображений с помощью ImageMagick


166

Я хотел бы объединить несколько изображений в одно изображение с помощью ImageMagick. Чтобы объяснить немного лучше, я хочу, чтобы результат выглядел примерно так:

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

По Google, я столкнулся с «составной» командой, но я не знаю, и если да, то как ее использовать, чтобы получить желаемый результат.



Ответы:


256

Для любого количества входных файлов с именем :in-<something>.jpg

convert -append in-*.jpg out.jpg

Для добавления определенных файлов или пропуска номеров вместо получения полного «глобуса», вы можете явно указать входные файлы и затем ввести appendкоманду

конвертировать in-1.jpg in-5.jpg in- N .jpg + добавить out-in1-plus-in5-and-in N .jpg

Вы можете использовать -append(вместо +append) для вертикальной вставки.

Или же:

montage -mode concatenate -tile 1x in-*.jpg out.jpg

также создаст файл out.jpg, содержащий вертикальную конкатенацию исходных изображений.

convert

Для простой конкатенации в одной строке или столбце достаточно appendопции convertинструмента. Обратите внимание, что -appendвсе изображения объединяются по вертикали, создается один столбец с n строками, а по +appendгоризонтали - один ряд с n столбцами.

(См. ImageMagick: Параметры командной строки .)

montage

Чтобы получить более точный контроль над макетом, нам нужен montageинструмент. montage -mode concatenateсклеит входные изображения вместе, как appendопция и -tile 1xконтролирует применяемый макет.

tileследует формату столбцов × строк , но любая из сторон может отсутствовать и montageвыяснить, как удовлетворить ограничения.

Мы используем 1x(ровно один столбец с любым количеством строк), чтобы получить тот же эффект, что и -append. Без -tile 1xэтого он будет объединять изображения по +appendумолчанию -tile x1(любое количество столбцов в одной строке).

(См. Примеры ImageMagick: Монтаж, Массивы изображений .)


1
Благодарю. Приложение append работает нормально, но я считаю, что монтаж сломан: если шрифты ghostscript не установлены, он вылетит, ДАЖЕ, если вы не аннотируете изображения. Шрифты следует загружать по запросу, а не заранее.
Брэм

@Bram: я этого не знал и полностью согласен. Знаете ли вы, если GraphicsMagick ведет себя так же?
Peth

2
@MikeRobinson convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpgдолжен сделать работу.
gozzilli

2
Обратите внимание, что команда convert -tile 2x2etc. будет читать файлы в алфавитном порядке . Это означает, что названные куски 0-10будут читаться как 0,10,1,2,..,9. У меня ушло почти 2 часа, чтобы осознать что-то основное.
phil294

1
@Blauhirn: Это преобразование, сортирующее имена файлов, или это просто ваш глобус, возвращающий файлы в таком порядке? Например ls *, вернет эти значения в этом порядке.
naught101
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.