Автоматическое объединение двух файлов изображений в один
Я использую инструмент командной строки Montage для объединения двух изображений JPG. Выходной jpg содержит общую полосу, присутствующую во входных jpgs. Ниже приведена команда для слияния двух jpgs:
montage -geometry 500 input1.jpg input2.jpg output.jpg
Как я могу избежать общей области в выходном файле? Есть ли другой инструмент для автоматического слияния двух изображений?
4 ответа
В ImageMagick вы можете просто добавить два изображения рядом или сверху / снизу.
convert image1.jpg image2.jpg -append result.jpg
будет делать сверху / снизу
convert image1.jpg image2.jpg +append result.jpg
будет делать влево / вправо.
Вы можете добавить столько изображений, сколько хотите разных размеров. Вы можете использовать параметр -gravity, чтобы выровнять их по желанию. Если размеры разные, то у вас будут фоновые области, которыми вы можете управлять цветом, используя -background somecolor. При желании вы можете изменить размер изображения, добавив -resize 500 после чтения входных данных и перед добавлением.
Если вы хотите сделать то, что предлагает Марк Сетчелл, то использование -page, вероятно, является лучшим методом, если у вас есть несколько изображений для слияния и смещения отличаются. Если у вас есть только пара изображений, вы можете перекрывать их, используя +smush в ImageMagick. Это как + добавление, но допускает либо перекрытие, либо разрыв в зависимости от знака аргумента. В отличие от -page, он сдвигается только в одном направлении в соответствии с +/- smush. Используя изображения Марка,
convert left.jpg right.jpg +smush -400 result.jpg
Я подозреваю, что вы пытаетесь сделать панораму, сшивая два изображения с областью общего наложения.
Итак, если мы начнем с left.png
:
а также right.png
:
Вы, вероятно, хотите это:
convert left.png -page +200 right.png -mosaic result.png
Чтобы вы могли видеть, что произойдет, если я изменю смещение по оси x, а также как добавить смещение по оси y:
convert left.png -page +280+30 right.png -mosaic result.png
Прежде чем найти этот ответ, я выбрал немного другую стратегию:
- (конкретно для меня)
-resize
изображения, если они имеют разный масштаб (dpi) - Поместите каждое изображение на холст желаемых объединенных размеров (
left+right-overlap
):-
-extent
это окончательные размеры -
-gravity
позиционирует каждое изображение сверху/снизу слева/справа -
-background none
поэтому пустая часть не белая
-
- сложить их с
(Код ImageMagick 7, просто замените
magick
с
convert
для IM6)
sz=1105x1155
magick \
\( \( right.jpg -resize 924x724^ \) \
-background none -gravity northeast -extent $sz \) \
\( left.jpg -background none -gravity southwest -extent $sz \) \
-composite result.jpg
Это кажется менее элегантным, чем существующие ответы, например-mosaic
согласно документации , используемый @Mark Setchell умнее :
Вместо того, чтобы создавать исходный холст только на основе размера холста исходного изображения, оператор мозаики создает холст, достаточно большой, чтобы вместить все изображения (только в положительном направлении).
... но, возможно, какой-то вариант использования предпочтет указать размер объединенного холста или необходимость-composite
параметры.