在同一命令中使用GraphicsMagick进行合成和裁剪

7
我需要获取图像的特定裁剪,并将其放置在另一张图片上的特定位置并调整大小。
我可以通过一个命令裁剪第一张图片并将其保存到文件中,然后我可以使用另一个命令合成这两个图像。 不过,我想用一个命令完成它 - 这在graphicsmagick中是否可行,如何操作?
这是我目前正在使用的两个命令:
gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg
gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg

为了避免将数据写入磁盘再读取,我们希望能够在内存中完成这些操作。例如,使用ImageMagick工具,可以将原本需要两个命令完成的操作合并为一个命令,如下所示:
convert lux_bg.png \( amber.jpg -crop 1457x973+254+413 \) -geometry 6000x4000+600+600 -composite out.jpg

我现在正在使用ImageMagick来做这件事,但很想用GraphicsMagick来完成。
2个回答

4
如果 你的原因 只是为了避免创建临时文件,你仍然可以通过构建 'pipelines' (一个伟大的概念,据我所知,由 Douglas McIlroy 在 1964 年左右发明) 来完成两个命令。
gm convert -crop 1457x973+254+413 amber.jpg - | gm composite -geometry 6000x4000+600+600 - lux_bg.png out.jpg

提示:注意两个命令中的两个破折号-和管道符|

因为这两个命令中的-分别表示标准输出和输入。

这意味着不会创建任何文件,所有操作都应在内存中进行。

您可以在帮助文档中找到此信息(gm -help convert | grep -i -e out -B 1):

将“file”指定为“-”,表示标准输入或输出。

在类Unix系统中,使用-是很常见的,并且可能受到了POSIX标准的实用程序语法准则的启发。


0
你尝试过使用 && 操作符吗?你的命令应该变成:
gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg && gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg

1
它们在技术上仍然是两个命令。想要一个单一的gm命令的原因是为了避免创建一个临时文件(例如我的tmp.jpg),这会涉及到不必要的硬盘读写。 - Dan Caragea
我在 Node 中使用 gm,我该如何将此命令翻译给它?如果我取消 crop 行的注释,目前会出错。 gm(img) .resize(1280) .composite(__dirname + '/../public/images/header.jpg') .geometry('+0+0') // .crop(1280,720,0,0) - jasan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接