我需要获取特定的图像裁剪并将其放在特定位置的另一张图像上并调整大小。
我可以裁剪第一个图像并将其保存到一个命令中的文件中,然后我可以将这两个图像合成到另一个命令中。 但是,我想在一个命令中完成它 - 这可能与graphicsmagick有关吗?
以下是我使用atm的两个命令:
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。
答案 0 :(得分:3)
如果 your reason只是to avoid creating a temporary file
,您仍然可以通过构建' pipelines'来完成两个命令。 (一个伟大的概念,afaik,道格拉斯麦克罗伊在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-like中很常见,并且必须受到POSIX标准Utility Syntax Guidelines的启发或相关的启发。
答案 1 :(得分:0)
您是否尝试过&&
运营商?你的命令应该成为:
gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg && gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg