【问题标题】:Combining multiple images in ImageMagick with relative (not absolute) offsets将 ImageMagick 中的多个图像与相对(非绝对)偏移量相结合
【发布时间】:2012-08-29 16:52:31
【问题描述】:

我正在寻找在 ImageMagick 中在背景图像之上将多个图像拼接在一起的最有效方法,以使重叠图像之间的间距/填充保持一致?

我研究了 +append、convert -composite 以及使用 -page 和 -layers merge 进行转换。

以下命令 (convert -composite) 有效,但需要预先计算图像尺寸以指定绝对偏移量。真的,我想要在第一个分层图像的结尾和第二个分层图像的开始之间有 10 像素的间隙,但我能看到的唯一方法是指定从画布左上角的绝对偏移量.

convert \
  background.jpg \
  first.jpg -gravity Northwest -geometry  +10+10 -composite \
  second.jpg                   -geometry +300+10 -composite \
  third.jpg                    -geometry +590+10 -composite \
  output.jpg

我正在寻找某种运算符,以便可以相对于分层中的“最后一个”图像解释水平偏移量,因此我没有为第二个图像指定 +300+10 为第三个图像指定 +590+10,而是可以以某种方式指定+10+10 偏移量。

我认为重力可以让我实现这一点 (-gravity Northwest),就像 float: left; 在 CSS 定位中的工作方式一样,但事实并非如此。

我在以下方面也取得了一些成功:

convert \
  -page  +10+10 first.jpg  \
  -page +300+10 second.jpg \
  -page +590+10 third.jpg  \
  -background transparent  \
  -layers merge \
   layered.png

convert background.jpg layered.png -gravity Center -composite output.jpg

所描述的两种技术都需要预先计算绝对偏移量,这有点麻烦。有没有更好的方法来做到这一点?

【问题讨论】:

  • 同一拼接过程的所有输入图像是否具有相同的宽度和高度(并且仅可能在下一次拼接时更改)?
  • 背景是真实的图像,但它的尺寸是静态的(或者至少它会是某种易于平铺/可裁剪的图像)。
  • 图片的尺寸并不完全相同。我们会将它们限制在给定的最大高度和最大宽度(待确定),因此根据输入图像的尺寸,这种限制将导致可变宽度。
  • 您没有明确回答我关于输入图像尺寸的问题。同样,换一种说法:一个拼接过程中的图像可以有不同的宽度吗?
  • 是的,它们可以有不同的宽度。

标签: imagemagick imagemagick-convert


【解决方案1】:

你忽略了montage 命令。

添加所需间距的最简单命令是使用-mattecolor none 设置-frame 5 选项。这适用于不同宽度值的图像,并将它们全部间隔 10 像素:

montage             \
  -alpha on         \
  -background none  \
  -mode concatenate \
  -tile x1          \
  -frame 5          \
  -mattecolor none  \
   *.jpg            \
   output1.png

但是,您会很容易注意到,生成的图像的边框在顶部、右侧、底部和左侧只有 5 个像素宽。要完全移除这 5 个像素,请使用:

convert  output1.png  -shave 5  output2.png

要将此结果覆盖在您的 background.jpg 上,请使用:

convert             \
  background.jpg    \
  output2.png       \
 -gravity Northwest \
 -geometry +10+10   \
 -composite         \
  final.jpg

【讨论】:

    【解决方案2】:

    您还可以使用 Kurt 的透明框架技巧与 append。使用追加而不是蒙太奇的优点是您可以使用重力设置来对齐图像顶部(北)底部(南)或中心。

    这是一个示例,说明如何水平附加图像,它们之间有 10 像素的间隙,并且图像顶部对齐:

    convert \
      -frame 5 \
      -mattecolor none \
      -background none \
      -gravity north \
      first.jpg second.jpg third.jpg \
      +append \
      png:- | convert - -shave 5
      output.png
    

    要垂直附加图像,请使用 -append 而不是 +append。我用过管道 |在同一命令中刮掉外框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2016-11-04
      • 2013-12-29
      • 2021-06-02
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      相关资源
      最近更新 更多