Как создать код для ImageMagick, который объединяет 2 изображения вместе? - PullRequest
0 голосов
/ 04 октября 2018

Можно ли написать код для ImageMagick, который берет 2 изображения, масштабирует их до максимального размера и создает комбинированное изображение, помещая первое поверх второго?Поддержание наилучшего качества jpg?

Файл Bat, который находит максимальный размер ниже:

    @echo off&setlocal enabledelayedexpansion

    for /f "tokens=1,2 delims=:" %%x in ('identify -format %%w:%%h image_1.jpg') do set a/ w1=%%x&set a/ h1=%%y
    for /f "tokens=1,2 delims=:" %%x in ('identify -format %%w:%%h image_2.jpg') do set a/ w2=%%x&set a/ h2=%%y

    if !w1! LSS !h1! (              rem w1<h1
      set "p1=oh*mdar:h='max(ih,main_h)'"
      if !w2! LSS !h2! (                rem w1<h1 & w2<h2
        set "p2=oh*mdar:h='max(ih,main_h)'" 
      ) else (                  rem w1<h1 & w2>=h2
        set "p2='max(iw,main_w)':h=ow*mdar"
      )
    ) else (                    rem w1>=h1
      set "p1='max(iw,main_w)':h=ow*mdar"
      if !w2! LSS !h2! (                rem w1>=h1 & w2<h2
        set "p2=oh*mdar:h='max(ih,main_h)'"
      ) else (                  rem w1>=h1 & w2>=h2
        set "p2='max(iw,main_w)':h=ow*mdar"
      )  
    )

ffmpeg -i image_1.jpg -i image_2.jpg -filter_complex "[0][1]scale2ref=w=!p1![0max][1ref];[1ref][0max]scale2ref=w=!p2![1max][0max];[0max][1max]vstack"

Соотношение сторон отличается.Нет прозрачности.«лучшее качество jpg» - бикубическое масштабирование или лучше, максимальный размер файла jpg: 100% качество jpg различно для каждой программы (фотошоп, ffmpeg, imagemagick ...), мне нужно максимально возможное 100% качество для ImageMagick.Я понимаю, что это с потерями.У меня последняя версия ImageMagick и Windows 10. Входные данные: jpg.

Схема объединения 1 / Схема объединения 2

1 Ответ

0 голосов
/ 05 октября 2018

Если мы предположим, что первое изображение больше второго, то в Imagemagick 6 вам придется рассчитать размер первого изображения и сохранить его в переменной.Затем используйте эту переменную, чтобы изменить размер второй.Затем добавьте два изображения по вертикали с гравитацией и цветом фона по желанию.

Вот команда в синтаксисе Unix от моего Mac OSX.(Извините, я не использую Window, чтобы знать, как обращаться с переменными, но см. https://imagemagick.org/Usage/windows/)

image1:

enter image description here

image2:

enter image description here

Unix для Imagemagick 6:

dims=$(convert red.jpg -format "%wx%h" info:)
convert red.jpg \( green.jpg -resize $dims \) -background white -gravity center -append -quality 100 red_green.jpg


В Imagemagick 7 в Unix вы можете сделать это водна командная строка:

magick red.jpg -set option:dims "%wx%h" \( green.jpg -resize "%[dims]" \) -background white -gravity center -append -quality 100 red_green.jpg


В этом случае команда Imagemagick 7 Window будет такой же, кроме как удалить \ s. Для bat удвойте%

magick red.jpg -set option:dims "%wx%h" ( green.jpg -resize "%[dims]" ) -background white -gravity center -append -quality 100 red_green.jpg


enter image description here

ДОПОЛНЕНИЕ:

Если вы не знаете, какое изображение больше или одно изображение больше по ширине, а другое больше по высотезатем в Imagemagick 7 вы можете выполнить:

magick red.jpg green.jpg -set option:ww "%[fx:max(u.w,v.w)]" -set option:hh "%[fx:max(u.h,v.h)]" -resize "%[ww]x%[hh]" -background white -gravity center -append -quality 100 red_green.jpg


ADDITION2:

При этом размеры обоих изображений будут изменены, так что их максимальные размеры будут равны наибольшему из двух.изображения (с сохранением соотношения сторон).

красный:

enter image description here

зеленый:

enter image description here

magick red2.jpg green2.jpg -set option:dim "%[fx:max(max(u.w,v.w),max(u.h,v.h))]" -resize "%[dim]x%[dim]" -background white -gravity center -append -quality 100 red_green2.jpg

enter image description here

ADDITION3:

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

. При этом размер большего размера каждого изображения изменяется до самого большого размера обоих изображений.

magick red2.jpg green2.jpg -set option:dim "%[fx:max(max(u.w,v.w),max(u.h,v.h))]" -resize "%[dim]x%[dim]" -background white -gravity center -append -gravity north -extent "%[dim]x" -quality 100 red_green3.jpg


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...