【问题标题】:How can I make a montage with ImageMagick from images with different size and aspect ratio?如何使用 ImageMagick 从具有不同大小和纵横比的图像制作蒙太奇?
【发布时间】:2014-03-10 12:45:18
【问题描述】:

我有很多图片,不同的尺寸和纵横比。有可能对它们进行蒙太奇吗?我的意思是在我为构建公共行的图像设置一个公共高度之后,将它们最佳地排列成行。当然不允许修改图像纵横比,并且不允许从最终蒙太奇中省略任何图像,也不允许重复。

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

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

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

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

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

例如:

【问题讨论】:

  • 如果这是一项“一生一次”的任务,我会推荐众多在线服务之一。它们提供了创造性的图像编译方式。 ImageMagick 的 montage 命令不会排列不同大小/纵横比的图像。
  • 您是否想过像我们最喜欢的搜索引擎对其图片搜索结果那样排列多张图片?或者您是否想到了一些更详细的问题,例如“修剪损失问题”(“修剪损失问题的基于规则的方法,Int. J. Prod. Res. 20, pp. 401-415, 1991)?无论如何 - 有趣的问题......
  • 我不太明白你想要什么。如果您为所有这些设置了一个共同的高度或宽度,并且如果您“可能裁剪”它们,那么“优化排列”它们也完全没有问题。或者是什么我不明白?

标签: optimization resize imagemagick crop montage


【解决方案1】:

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

这就是我的想法。假设您有 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 个补丁中,并以原始大小对其进行蒙太奇。空白是补丁不“适合”的地方:

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 个补丁中:

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 个补丁中:

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 个补丁中:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2012-11-04
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2014-06-20
    • 2016-04-22
    相关资源
    最近更新 更多