我想从其他人创建一个图像,这是convert
操作自己的结果,而不将中间结果保存到文件系统。
长解释:
我有两张图片,两张需要特定的转换:
然后我想在 colored-background.jpg 中dissolve
rounded-avatar.png ,这样我就会得到这样的内容:
+-----------+ | O | +-----------+
到目前为止我有什么:
我知道如何按顺序进行这些操作(可能不是最好的方法,但这不是这个问题的主题),我甚至制作了一个有效的bash脚本:
#!/bin/bash
convert $1 -alpha set -background none -vignette 0x0 rounded-avatar.png
convert $2 -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 $3
我可以用
来调用它$ ./myScript.sh avatar.jpg background.jpg output.jpg
我想要的是什么:
我想避免在文件系统上保存两个临时图像( rounded-avatar.jpg 和 colored-background.jpg )。
为什么?
我希望我只是错过了在文档中找到答案的正确关键字。
我知道这可能看起来过于优化而且我在这里没有遇到C10k问题,但我只是想这样做(并理解IM语法)。
答案 0 :(得分:3)
如果没有看到你的照片,有点难以帮助!我想它看起来会像这样:
convert -gravity center \
\( $1 -alpha set -background none -vignette 0x0 )\ \
\( $2 -auto-orient -thumbnail 600x313^ -gravity center -extent 600x313 -region 100%x100% -fill "#256997" -colorize 72% )\ \
-compose dissolve -composite result.jpg
突出部分是
a)您可以使用括号对一个特定图像执行'旁边处理
b)您可以将2个或更多图像加载到一堆图像上进行处理
c)在设置convert
类型代替实际的-composite
命令后,您可以使用-compose
命令的compose
运算符。
选项2
另一种选择可能是将MIFF
格式用于多个图像和这样的管道:
convert \( $1 .... \) \( $2 ... \) miff:- | composite -dissolve 100 -gravity center - ...
选项3
另一种选择是为每个输入文件使用单独的convert
,然后将连接的结果发送给第三个convert
或composite
,如下所示:
(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的磁盘空间
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..."
答案 1 :(得分:1)
Mark的答案(我没有仔细看过它)我相信为你做“正确的事”。
...关于
“我只是想这样做(并理解IM语法)。”
......这两个其他的SO答案可以帮助您更好地理解IM语法: