ImageMagick:与多次转换的结果组合

ImageMagick : Compose with results of multiple convert

我想创建一个图像给其他人,这是他们自己 convert 操作的结果,而不将中间结果保存到文件系统。

详细解释:

我有两张图片,这两张需要特定的t运行格式:

然后我想dissolve rounded-avatar.png in colored-background.jpg,这样我就得到了这样的东西:

  +-----------+
  |     O     |
  +-----------+

我目前有:

我知道如何按顺序进行这些操作(也许不是最好的方法,但这不是这个问题的主题),我什至制作了一个有效的 bash 脚本:

#!/bin/bash

convert  -alpha set -background none -vignette 0x0 rounded-avatar.png

convert  -auto-orient -thumbnail 600x313^ -gravity center -extent 600x313 -region 100%x100% -fill "#256997" -colorize 72% colored-background.jpg

composite -dissolve 100 -gravity Center rounded-avatar.png colored-background.jpg -alpha Set 

我可以用

调用它
$ ./myScript.sh avatar.jpg background.jpg output.jpg

我想要的:

我想避免保存两个临时图像(rounded-avatar.jpgcolored-background.jpg) 在文件系统上。

为什么?


我希望我只是缺少正确的关键字来在文档中找到答案。

我知道这似乎过度优化了,我在这里并没有为 C10k 问题苦苦挣扎,但我只是想正确地做这件事(并理解 IM 语法)。

没有看到您的图片有点难以帮助!我猜它看起来像这样:

convert -gravity center                                    \
        \(  -alpha set -background none -vignette 0x0 \) \
        \(  -auto-orient -thumbnail 600x313^ -gravity center -extent 600x313 -region 100%x100% -fill "#256997" -colorize 72% \) \
        -compose dissolve -composite result.jpg
        

突出的部分是

a) 你可以使用括号对一个特定的图像进行 'aside-processing'

b) 您可以将 2 个或更多图像加载到一种图像堆栈中以进行处理

c) 在设置 -compose 类型代替实际的 compose 命令本身后,您可以使用 convert 命令的 -composite 运算符。

选项 2

另一种选择可能是对多个图像和管道使用 MIFF 格式,如下所示:

convert \(  .... \) \(  ... \) miff:- | composite -dissolve 100 -gravity center -   ... 

选项 3

另一种选择是对每个输入文件使用单独的 convert,然后将连接的结果发送到第三个 convertcomposite,如下所示:

(convert -size 100x100 xc:red miff:- ; convert -size 100x100 xc:blue miff:- ) | convert - +append result.jpg

这给出了这个:

选项 4

如果图像在合并之前需要大量处理,您可以开发选项 3,以便并行处理 2 个输入图像,就像这样

mkfifo fifo1 fifo2 2>/dev/null
convert -size 2000x2000 xc:gray +noise gaussian -median 7 jpeg:fifo1 &
convert -size 2000x2000 xc:gray +noise gaussian -median 7 jpeg:fifo2 &
convert fifo1 fifo2 +append result.jpg       # or equally "convert fifo[12] ..."

需要 33 秒,而下面的顺序版本需要 64 秒,并且在顶部使用 2MB 磁盘space

convert -size 2000x2000 xc:gray +noise gaussian -median 7 1.jpg
convert -size 2000x2000 xc:gray +noise gaussian -median 7 2.jpg
convert 1.jpg 2.jpg +append result.jpg       # or equally "convert [12].jpg..."

马克的回答(我没有仔细看)我相信 "the right thing" 可以为您效劳。

关于...

"I just want to do this right (and understand IM syntax)."

...这两个其他 SO 答案可能会帮助您更好地理解 IM 语法:

  • ImageMagick Command-Line Option Order {and Categories of Command-Line Parameters}

  • ImageMagick “color to alpha” (like The GIMP)