首页 > 解决方案 > Imagemagick 堆栈图像与透明度重叠

问题描述

我现在正在为此奋斗两天......没有成功。我用 Gimp 完成的一些任务已经有一段时间了,但我现在喜欢让它自动化以进行标准处理。

所以结果应该看起来像这样https://imgur.com/a/jcb3amr 前面有一个图像,后面有两个或三个图像,具有一些透明度以淡出图层(可选)。一组中总是有相同的图像尺寸。但尺寸可能与其他组不同。示例:要组合的一组是每个图像 124x112px,另一组是每个 188x80px,下一组是 164x160px。

我尝试过类似的东西

convert image1.png image2.png image3.png -set page '+%[fx:u[t-1]page.x+u[t-1].w-256]+%[fx:u[t-1]page.y+16]' -background none -layers merge +repage output.png

对于某些文件,这工作正常(除了可选的透明度)。我真的不需要一个procentual偏移,如果每一层都偏移30x5px就可以了。但是输出图像应该与输入图像相关。

所以,简而言之..现在真的很困惑如何实现这一点。希望有人可以提供帮助。我还研究了 PHP Imagick 扩展https://www.php.net/manual/de/book.imagick.php 我有以下方法,比上述方法更糟糕

  $imagick->newimage(200, 112, '#ffffffff');
  foreach ($uploadfiles as $file) {    
    $im = new Imagick($file);
    $imagick->compositeimage($im, Imagick::COMPOSITE_DEFAULT, 30, 5);
  }
  $imagick->writeImage($output);

似乎根本没有抵消它。

有人能帮我一把吗?

标签: transparencylayerimagemagick-convert

解决方案


这在 Imagemagick 6 中对我有用。

输入:

在此处输入图像描述

convert lena.png \( lena.png -duplicate 2 -alpha set -channel a -evaluate set 75% \) lena.png -set page '+%[fx:u[t-1]page.x+u[t-1].w-128]+%[fx:u[t-1]page.y+16]' -background none -layers merge +repage output.png


在此处输入图像描述

第一个和最后一个图像是不透明的,中间 3 个是 75% 不透明(25% 透明)

添加:

如果您只想要 30 的固定 X 偏移而没有 Y 偏移,则使用

convert lena.png \( lena.png -duplicate 2 -alpha set -channel a -evaluate set 75% \) lena.png \
-set page '+%[fx:u[t-1]page.x+30]+0' -background none -layers merge +repage output.png


在此处输入图像描述


推荐阅读