【问题标题】:graphicsmagick composite and crop in the same commandgraphicsmagick 在同一命令中合成和裁剪
【发布时间】:2013-11-17 14:41:19
【问题描述】:

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

我可以在一个命令中裁剪第一张图像并将其保存到一个文件中,然后我可以在另一个命令中合成这两个图像。 但是,我想在一个命令中完成 - 使用 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 做。

【问题讨论】:

    标签: crop composite graphicsmagick


    【解决方案1】:

    如果 your reason 只是 to avoid creating a temporary file,您仍然可以通过构造 'pipelines' 使用两个命令来完成它(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 的启发或相关内容。

    【讨论】:

      【解决方案2】:

      您尝试过&& 运算符吗?你的命令应该变成:

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

      【讨论】:

      • 从技术上讲,它们仍然是 2 个命令。需要单个 gm 命令的原因是避免创建一个临时文件(在我的示例中为 tmp.jpg),该文件涉及对硬盘进行不必要的读/写。
      • 我在节点中使用 gm,我将如何将此命令翻译成它?目前,如果我取消注释裁剪线,则会出现此错误:gm(img) .resize(1280) .composite(__dirname + '/../public/images/header.jpg') .geometry('+0+0') // .crop(1280,720,0,0)
      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多