У меня есть куча фотографий. Все они имеют одинаковую высоту, и я пытаюсь объединить их в составное изображение с помощью программы монтажа ImageMagick через Bash. Проблема в том, что по умолчанию размер плитки (одно изображение занимает одну плитку) равен изображению с наибольшими размерами. Поэтому узкие изображения окружены множеством пустых пространств. Я хочу удалить этот пробел. Как мне это сделать?
bash
imagemagick
image-manipulation
Жиль "ТАК - перестань быть злым"
источник
источник
Ответы:
Попробуйте что-то вроде этого:
Это сделает границу между изображениями как можно меньше, и все, что там будет, будет прозрачным.
Чтобы увидеть демонстрацию разницы с использованием встроенных изображений, попробуйте это и сравните:
См. Использование монтажа .
Если вы опубликуете пример того, что вы получаете, и вручную отредактируете пример того, что вы хотели бы получить в результате, мы могли бы немного приблизиться к этому.
Вот примеры, которые мне нравятся больше, чем те, которые я первоначально разместил выше:
источник
Я бы согласился с принятым ответом
-geometry +0+0
на удаление лишнего пространства плитки, и я бы добавил-mode Concatenate
(при определенных условиях).Кроме того, как только у вас есть разные размеры
montage
, становится немного трудно различить, что такое «фон мозаики» (пространство листов) и «кадр» и «граница» - я часто теряю след, так что вот небольшой тестовый пример с (кликабельные) изображения:Ну, надеюсь, это может быть полезным,
ура!
РЕДАКТИРОВАТЬ: я собрал небольшой графический интерфейс Python / Tkinter / PIL для ImageMagick, tkGui_ImageMagick.py - и, наконец, я смог найти подходящую командную строку для чего-то, что я хотел: сделать монтаж из четырех изображений, где высота и ширина плиток сопоставляются с максимальной шириной этого столбца (или высотой строки).
В этом примере img1 (200x100) и img2 (300x200) идут в первом столбце, большая ширина - 300, что должно устанавливать ширину плитки img1. Кроме того, img1 необходимо соотнести высоту с большей высотой img3 (300 пикселей), с которой он образует строку. Это можно указать через
extent
оператора (см. Также ImageMagick • Просмотр темы - Изменение размера и заполнение вместо растяжения ). И эта командная строка требует, чтобы вызовы подпроцесса отделялиmontage
s для каждого столбца, а оттуда отдельныеconvert
s для каждого изображения:Обратите внимание, здесь, если мы использовали
-extents
непосредственно в линии монтажа, как это:... мы заметим, что первая спецификация для высоты (200) будет проигнорирована, и 400 в любом случае будут применены к обеим плиткам в любом случае !
Таким образом, мы должны контролировать заполнение каждого отдельного изображения (вызывая
convert
withextents
для каждого ) - и затем избегатьextents
вmontage
строке; и как таковой, мы должны априори знать (наибольшую) ширину каждого столбца (и высоту каждой строки). Обратите внимание также:convert
)montage
, обычно-gravity
должен идти после (полностью указано: w & h)-extent
; вconvert
,-gravity
работает раньше-extent
(обычно)источник
Не с
montage
, но чувствует себя более точным со следующим:x500
желаемая конечная высотаисточник