我想要从两个图像中创建一个图像,这两个图像是通过
长说明:
我有两个图像,需要进行特定的变换:
- avatar.jpg需要转换为圆形图像 -> rounded-avatar.jpg - background.jpg需要应用颜色层 -> colored-background.jpg 然后我想在colored-background.jpg中
我希望我只是错过了在文档中找到答案的关键词。
我知道这可能看起来过于优化,而且我在这里并没有遇到C10k问题,但我只是想做得正确(并理解IM语法)。
convert
操作得到的结果,而无需将中间结果保存到文件系统中。长说明:
我有两个图像,需要进行特定的变换:
- avatar.jpg需要转换为圆形图像 -> rounded-avatar.jpg - background.jpg需要应用颜色层 -> colored-background.jpg 然后我想在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)。
为什么?
- 这个程序必须在网络平台上自动运行,我不想用命名技巧处理那些临时文件的并发。
- 当前脚本使IM两次加载图像,重用计算出的图像可能更有效,而不是将它们写入磁盘,然后在新进程中加载它们。
- 磁盘I/O在今天很缺乏,让我们节省一些。
我希望我只是错过了在文档中找到答案的关键词。
我知道这可能看起来过于优化,而且我在这里并没有遇到C10k问题,但我只是想做得正确(并理解IM语法)。