将2个GraphicsMagick命令组合成1个命令,就像在ImageMagick中一样

时间:2014-05-10 10:04:20

标签: php resources imagemagick graphicsmagick

我正在使用ImageMagick创建一个带水印的新调整大小的图像,使用这个单一命令(在PHP中):

exec("convert -filter Lanczos {$original_image} -thumbnail {$max_width}x{$max_height} -quality 90 {$watermark} -gravity center -unsharp 2x0.5+0.7+0 -composite {$cached}");

现在我切换到GM并且正在寻找运行1命令来执行相同任务的方法。我找到的唯一方法是将其拆分为两个单独的命令:

//create the resized image
  exec("gm convert -filter Lanczos {$original_image} -thumbnail {$max_width}x{$max_height} -quality 90 -unsharp 2x0.5+0.7+0 {$cached}");
  //apply the watermark and recreate the watermarked image, overwriting the previously resized image
  exec("gm composite -quality 90 -dissolve 100 -gravity center {$watermark} {$cached} {$cached}");

有没有办法将它们组合成1个单一命令,这可能也会减少资源和开车使用?

1 个答案:

答案 0 :(得分:1)

我收到了来自GraphicsMagick Maintainer的Bob Friesenhahn的以下回复:

  

您没有说明您使用的是什么版本的GraphicsMagick。现代   版本支持'-compose'选项,该选项可以放在命令上   输入文件名后的行记住组合算法   使用。然后使用该组合算法,如果是 - 马赛克或    - 范围运算符用于执行合成。你也可以使用   -page选项在输入文件名后用来定位图像   与列表中的先前图像合成。由于缺点   GM的转换命令处理,-mosaic或-extent运算符必须   是保存输出文件之前的最后一个命令。我相信   ImageMagick的-composite必须是-mosaic的版本,它会增加更多   特征(例如-mosaic可能不支持重力,但-composite确实如此)。   似乎GraphicsMagick应该完全实现一些东西   兼容ImageMagick的-composite。   无论如何,如果需要,可以使用有效的解决方法   使用现有的GM命令。   如果你有一个支持'gm batch'的现代GraphicsMagick,那么   你可以使用'mpr'编码器(“Magick Persistent Registry”)来记住   命令之间的中间图像,您可以轻松地适应您的两个   使用现有命令以完全高效执行的命令   线。这个Unix shell示例应该给你一些想法:

{
   echo convert seaworld.jpg mpr:temporary
   echo convert mpr:temporary crap.jpg
} | gm batch -prompt off -echo on
convert seaworld.jpg mpr:temporary
convert mpr:temporary crap.jpg
  

请注意,第一个命令的输出已保存(作为图像   在GraphicsMagick中本地使用的句柄转换为'mpr:temporary'   然后第二个命令从'mpr:temporary'获取输入并写入   最终的输出文件。您可以使用任意字符串参数   'mpr:'所以你可以在飞行中有几张图像。   使用这种方法,你可以使用'gm convert'和'gm composite'   同一批次命令。   我不确定如何最好地从PHP访问这个批处理工具   但是如果PHP可以从管道向它传输命令,那么它可以运行   很长一段时间作为PHP的协同进程并节省了大量的计算   时间和开销。