7

我需要获取图像的特定裁剪并将其放在另一个图像上的某个位置并调整大小。

我可以在一个命令中裁剪第一张图像并将其保存到一个文件中,然后我可以在另一个命令中合成这两个图像。但是,我想在一个命令中完成它 - 这可以使用 graphicsmagick 吗?如何?

这是我使用 atm 的 2 个命令:

gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg
gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg

想要这样做的原因是避免写入磁盘然后在所有这些都可以在内存中完成时再次读取。例如,使用 ImageMagick,相同的 2 个命令将被写入一个命令中,如下所示:

convert lux_bg.png \( amber.jpg -crop 1457x973+254+413 \) -geometry 6000x4000+600+600 -composite out.jpg

我现在用 ImageMagick 做这件事,但很想用 GraphicsMagick 做。

4

2 回答 2

4

如果 您的理由很简单to avoid creating a temporary file,您仍然可以通过构建“管道”(afaik,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) 中找到它:

对于标准输入或输出,将“文件”指定为“-”。

的使用在类 unix 中很常见,并且一定是受到 POSIX 标准的Utility Syntax Guidelines-的启发或相关内容的启发。

于 2015-05-04T15:19:34.353 回答
0

你试过&&运营商吗?你的命令应该变成:

gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg && gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg
于 2013-11-13T14:49:14.867 回答