如何从具有不同大小和宽高比的图像中使用ImageMagick制作蒙太奇?

Kon*_*tin 7 optimization resize crop imagemagick montage

我有很多图像,不同的大小和宽高比.是否有可能对它们进行蒙太奇?我的意思是在为构建公共行的图像设置公共高度后,将它们最佳地排列成行.当然,不允许图像宽高比进行修改,并且不允许任何图像从最终剪辑中删除,也不允许复制.

蒙太奇中图片行的高度通常不相等,但是它们的值应该保持在最小范围内(统计意义上)或换句话说:必须最小化与行高度的平均值的标准偏差.

给出所需的蒙太奇宽度和高度(a.)

或者给出宽度和允许的比率范围(或等效的高度范围)(b.),例如宽度必须是1024像素,高度必须使得w/h <0.9且w/h> 0.8

1.)图像必须按照初始固定顺序打包在蒙太奇中.在这种情况下,必须在蒙太奇(简单)中开始新图像行之后找到图像.

2.)允许改变图像顺序.在这种情况下,必须找到一种排列,当每个图像被打包到蒙太奇(硬)中时,这导致最终行高的标准偏差的最小化.

例如:

在此输入图像描述

在此输入图像描述

Kur*_*fle 6

我不确定我是否理解你的问题.

这就是我所做的.假设你有8个不同大小的不同图像.出于演示目的,我将让ImageMagick将它们创建为8种不同的色块:

convert -size  90x90  xc:yellow  y.png
convert -size 120x120 xc:red     r.png
convert -size  60x210 xc:green   g.png
convert -size 150x180 xc:blue    b.png
convert -size  30x60  xc:cyan    c.png
convert -size 150x90  xc:magenta m.png
convert -size  90x120 xc:gray    Gr.png
convert -size 120x90  xc:black   K.png
Run Code Online (Sandbox Code Playgroud)

您可以通过多种方式修剪这些补丁:

convert \( y.png r.png g.png  b.png +append \)  \
        \( c.png m.png Gr.png K.png +append \)  \
       -append                                  \
       -mattecolor lightblue                    \
       -frame 1x1                               \
        montage0.png
Run Code Online (Sandbox Code Playgroud)

此命令不会缩放不同的修补程序.它将它们分成两行,一个4个补丁,然后以原始大小对它们进行剪辑.白色空间是补丁不适合的地方:

montage0.png

convert \( y.png r.png g.png  b.png -resize x60 +append \)  \
        \( c.png m.png Gr.png K.png -resize x60 +append \)  \
       -append                                              \
       -mattecolor lightblue                                \
       -frame 1x1                                           \
        montage1.png
Run Code Online (Sandbox Code Playgroud)

此命令将所有不同的色块缩放到60像素的公共高度(保留它们各自的宽高比),并将它们分成2行,每4个色块:

montage1.png

convert \( y.png r.png g.png  b.png -resize 60x +append \)  \
        \( c.png m.png Gr.png K.png -resize 60x +append \)  \
       -append                                              \
       -mattecolor lightblue                                \
       -frame 1x1                                           \
        montage2.png
Run Code Online (Sandbox Code Playgroud)

此命令将所有不同的色块缩放到60像素的公共宽度(保留它们各自的宽高比),并将它们分成2行,每4个色块:

montage2.png

convert \( y.png r.png g.png  b.png -resize 60x80\! +append \)  \
        \( c.png m.png Gr.png K.png -resize 60x80\! +append \)  \
       -append                                                  \
       -mattecolor lightblue                                    \
       -frame 1x1                                               \
        montage3.png
Run Code Online (Sandbox Code Playgroud)

此命令将所有不同的修补程序缩放为60x80像素的尺寸(覆盖其原始高宽比),并将它们分为2行和4个修补程序:

montage3.png