是否可以为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。
答案 0 :(得分:0)
如果我们假设第一个图像大于第二个图像,则在Imagemagick 6中,您将必须计算第一个图像的大小并存储在变量中。然后使用该变量调整第二个的大小。然后根据需要垂直添加具有重力和背景色的两个图像。
这是Mac OSX中使用Unix语法的命令。 (很抱歉,我不使用Window来知道如何处理变量,而是请参阅https://imagemagick.org/Usage/windows/)
图片1:
image2:
用于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
添加:
如果您不知道哪个图像更大,或者一个图像的宽度更大而另一个图像的高度更大,那么在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:
这将调整两个图像的大小,以使两个图像的最大尺寸都设置为两个图像的最大尺寸(保留宽高比)。
红色:
绿色:
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
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