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

实用Imagemagick堆栈(组合)复杂命令,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我想要一个组合命令,它可以在一次执行中执行以下任务。我搜索了互联网,但几乎找不到任何指导我们编写堆栈命令的教程。我可以为每个操作找到单个命令,例如-composite,-blur,等等,我知道我可以将命令作为管道传输 convert ... mpr:- | convert ... mpr:- | ... | convert ... png:- 但是,我需要一个使用\(…\)和mpr:{label}的组合命令,因为这将提高性能,因为所有操作都是在单个进程中执行的(shell中的管道可能会降低性能

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

convert ... mpr:- | convert ... mpr:- | ... | convert ... png:-
但是,我需要一个使用
\(…\)
mpr:{label}
的组合命令,因为这将提高性能,因为所有操作都是在单个进程中执行的(shell中的管道可能会降低性能,并且进程序列必须有序)

过程顺序如下:

  • flower.png
    放在
    frame.png
    ->
    mpr:framedFlower

  • mpr:framedFlower
    放在
    background.png
    ->
    mpr:out2

  • 模糊
    heart.png
    ,右渐变透明
    smiley.png
    ,并将两幅图像置于
    mpr:out2
    ->
    mpr:out3

  • 用“Hello world”(placement=bottom)->png注释
    mpr:out3
    :-

    我不包括我尝试过的命令,因为它们太乱了,这将是对阅读它的用户的侮辱。我试了好几个小时,但都做不成。请告知


  • 我还并没有花很长时间来研究精确的坐标,因为我只使用了样本图片,但这一行包含了你们所要求的每一种技术

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

    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
    

    第一行读入相框和花,并根据括号分别调整大小,然后将花合成到相框中

    下一行加载背景,然后使用
    +swap
    将其放在上一行的带框图片后面。然后,它将
    -gravity
    设置为西北方向,作为后续
    -geometry
    的原点,然后再将带边框的图片合成到背景上

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

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

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

    希望这是相当清楚的

    启动图像


    谢谢,我试过了,效果很好。最初,我尝试了
    convert frame.png flower.png-composite-write-mpr:a\\(background.png-mpr:a-composite-write-mpr:b\)\(mpr:b heart.png-composite-write-mpr:c\)。。。。png:-
    它一直在失败。从您的回答中,我刚刚意识到我们可以在图像堆栈中合成图像,而不是使用
    mpr:{label}
    。很抱歉我的回复太晚,我花了很多时间重新阅读这些教程。当我获得足够的声誉时,我会投赞成票,谢谢。