实用的Imagemagick堆栈(组合)复杂命令

时间:2016-11-05 05:55:55

标签: imagemagick imagemagick-convert

我想要一个可以在单次执行中执行以下任务的组合命令。我搜索了互联网,但几乎找不到任何指导我们编写任何堆栈命令的教程。我可以为每个操作找到单个命令,例如-composite-blur等,我知道我可以这样管道命令

convert ... mpr:- | convert ... mpr:- | ... | convert ... png:-

但是,我想要一个使用\( ... \)mpr:{label}的组合命令,因为这将提高性能,因为所有操作都在单个进程中执行(shell中的管道会降低性能和进程序列必须按顺序)。

enter image description here

过程顺序如下:

  1. flower.png放在frame.png - >之上mpr:framedFlower
  2. mpr:framedFlower放在background.png - >之上mpr:out2
  3. 模糊heart.png,右边渐变透明smiley.png并将两张图片放在mpr:out2 - >之上mpr:out3
  4. 使用" Hello world"注释mpr:out3 (placement = bottom) - > PNG: -

    我没有包含我尝试过的命令,因为它们太乱了,对于阅读它的用户来说是一种侮辱。我试了好几个小时,但不能完成它。请指教。

1 个答案:

答案 0 :(得分:1)

由于我只使用样本图片,我没有用精确的坐标来度过难关,但是这个单行程包含了你所需要的所有技巧。

最终图像中每个元素基本上有一行代码:

convert frame.png -resize 500x400\! \( flower.png -resize 400x300\! \) -gravity center -composite \
   background.png +swap -gravity northwest -geometry +100+150 -composite \
   \( heart.png -resize 200x200 -blur 0x8 \) -geometry +1200+250 -composite \
   -gravity south -pointsize 72 -fill red -annotate +0+60 'Hello world' \
   \( emoji.png -resize 250x250 -channel a -fx "u.a*(1-(i/w))" \) -gravity northwest -geometry +1200+500 -composite result.png

enter image description here

第一行读取相框和花朵,并根据括号将它们各自独立调整大小,然后将花朵合成到框架中。

下一行加载背景,然后使用+swap置于后面上一行的带框图片。然后,在将框架图片合成到背景上之前,它会将-gravity设置为西北作为后续-geometry的原点。

下一行加载心脏并调整心脏的大小并使其模糊,然后将其合成到指定位置的主图片上。

接下来是注释 - 唯一有趣的是我将-geometry设置为south,这意味着-annotate的偏移量相对于背景的底部中心。

最后,我加载表情符号并在合成主图像之前将其调整为括号。唯一有趣的是我使用-fx来改变alpha通道(-channel a),并将现有透明度(u.a)乘以我们所穿过距离的倒数的分数图像,即(1-(i/w))

希望相当清楚!

启动图片

enter image description here

enter image description here

enter image description here

enter image description here