如何为ImageMagick创建将2张图像组合在一起的代码?

时间:2018-10-04 20:37:50

标签: imagemagick

是否可以为ImageMagick编写代码,以获取2张图像,将它们缩放到最大尺寸,并创建将第一张图像放置在第二张图像之上的组合图像?保持最佳的jpg质量?

蝙蝠文件,其最大大小如下:

    @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文件大小设置:每个程序(photoshop,ffmpeg,imagemagick ...)的100%jpg质量都是不同的,对于ImageMagick,我需要最大可能的100%质量。我知道这是有损的。我有最新的ImageMagick和Windows10。输入为jpg。

Combining Scheme 1 / Combining Scheme 2

1 个答案:

答案 0 :(得分:0)

如果我们假设第一个图像大于第二个图像,则在Imagemagick 6中,您将必须计算第一个图像的大小并存储在变量中。然后使用该变量调整第二个的大小。然后根据需要垂直添加具有重力和背景色的两个图像。

这是Mac OSX中使用Unix语法的命令。 (很抱歉,我不使用Window来知道如何处理变量,而是请参阅https://imagemagick.org/Usage/windows/

图片1:

enter image description here

image2:

enter image description here

用于Imagemagick 6的Unix:

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


在Unix中的Imagemagick 7中,您可以在一个命令行中完成该操作:

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


在这种情况下,除了删除\ s,Imagemagick 7 Window命令将是相同的。对于蝙蝠,将%翻倍

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