【发布时间】:2015-06-05 18:04:39
【问题描述】:
我想为其他人创建一个图像,这是convert 自己操作的结果,而不会将中间结果保存到文件系统。
详细解释:
我有两张图片,这两张需要具体的转换:
- avatar.jpg 需要转成圆形图片 -> rounded-avatar.jpg
- background.jpg 需要应用颜色层 -> colored-background.jpg
然后我想dissolverounded-avatar.png in colored-background.jpg,这样我就得到了这样的东西:
我目前所拥有的:
我知道如何按顺序进行这些操作(也许不是最好的方法,但这不是这个问题的主题),我什至制作了一个有效的 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)。
为什么?
- 这个过程必须在网络平台上自动运行,我不想用命名技巧来处理那些临时文件的并发。
- 当前脚本使 IM 在内存中加载图像两次,重用计算的图像而不是将它们写入磁盘然后在新进程中加载它们可能会更有效。
- 现在磁盘 I/O 很稀缺,让我们节省一些。
我希望我只是错过了在文档中找到答案的正确关键字。
我知道这可能看起来过度优化,我并没有在这里为 C10k 问题苦苦挣扎,但我只想正确地做这件事(并理解 IM 语法)。
【问题讨论】:
-
能否请您提供您的输入图像以及您的脚本产生的输出?
标签: imagemagick imagemagick-convert