如何使用ImageMagick从尺寸和长宽比不同的图像制作蒙太奇?

10
我有许多不同尺寸和长宽比的图像。是否可以制作拼贴画?我的意思是,在设置构成公共行的图像的公共高度后,最佳地将它们排列在行中。当然,图像的长宽比不允许修改,并且不能从最终拼贴画中省略任何图像或重复。
拼贴画中图片行的高度通常不相等,但它们的值应该保持在一个最小范围内(在统计意义下),换句话说:必须最小化行高的平均值与标准偏差之间的差异。
所需的拼贴画宽度和高度已经给出(a.)
或者给出了宽度和允许的纵横比范围(或等效的高度范围)(b.),例如,宽度必须为1024像素,高度必须使w/h < 0.9且w/h > 0.8
1.) 图像必须按照它们的初始固定顺序打包到拼贴画中。在这种情况下,必须找到应在拼贴画中开始新图像行的图像(容易)。
2.) 允许更改图像的顺序。在这种情况下,必须找到导致每个图像打包到拼贴画中时最小化最终行高标准偏差的置换(难)。

例如:

enter image description here

enter image description here


如果这是一项“千载难逢”的任务,我建议使用众多在线服务之一。它们提供了编译图像的创意方式。ImageMagick的拼贴命令不能排列不同大小/长宽比的图像。 - Aziraphale
1
你是否考虑过像我们最喜欢的搜索引擎在图片搜索结果中所做的那样排列多张图片?或者你是否考虑过像“修剪损失问题”(“修剪损失问题的基于规则的方法”,Int. J. Prod. Res. 20, pp. 401-415, 1991)这样更为详细的东西?无论如何,这是一个有趣的问题... - leu
我真的不太明白你想要什么。如果你为它们设置一个共同的高度或宽度,并且如果你也“可能裁剪”它们,那么将它们“最佳排列”就没有问题了。或者是我没有理解到什么? - Kurt Pfeifle
1个回答

15

我不确定我是否正确理解了你的问题。

这是我的理解。假设你有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

您可以以许多不同的方式拼接这些贴片:

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

该命令不会对不同的图块进行缩放。它将它们放置在2行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

此命令将所有不同的补丁缩放到相同的高度为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

这个命令将所有不同的拼贴图按比例缩放到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

此命令将所有不同的贴片缩放到60x80像素的尺寸(覆盖其原始长宽比),并将它们分成2行4个贴片:

montage3.png


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接