结合2 imagesmagick resize命令

时间:2011-11-23 10:11:41

标签: php optimization imagemagick

我必须通过Imagesmagick调整图像大小,并且必须创建它的2个较小版本,就像这样:

<?php
            $command = $IMPath.'convert -limit memory 32 input.jpg -resize 500x500  biggeroutput.jpg';
            exec($command, $output);
            $command = $IMPath.'convert -limit memory 32 input.jpg -resize 90  smalleroutput.jpg';
            exec($command, $output);
?>

有没有办法将它与一个执行官合并?没有开始转换2次?

2 个答案:

答案 0 :(得分:1)

ImageMagick命令行的文档明确指出不支持多个输出:您唯一的选择是直接使用gdImageMagick PHP API而不是命令行(提示:使用Imagick::cloneimagecreatetruecolor / imagecopy函数。

作为一个副节点,通过这种方式,您还可以避免仅为imagemagick客户端生成单独进程的开销。

编辑:此外,您可能希望缓存这些备用版本,这样您就不必在每次有人要求时重新生成它们。我不得不在几年前开发的几个图像密集的网站上做同样的事情。

答案 1 :(得分:1)

关于优化图像缩小步骤的主题,没有直接回答你的问题(比如CAFxX,我从未见过两种输出到一个ImageMagick命令的方法)。

一种选择是从第一个命令的中型图像创建较小的缩略图。即:

  1. 将高分辨率源图像缩小为500x500
  2. 将500x500图像从步骤1缩小到90x90
  3. 这肯定有助于提高速度。我也读过一次(我害怕链接逃脱了我),这不会使质量比从全尺寸缩小到90x90更糟糕,并且实际上可以让它看起来更好。

    使用ImageMagick API可以很好地实现这一点,因为您将源图像加载到内存中一次,缩小一次,保存JPEG,然后再次收缩它而不从1加载数据从磁盘返回内存。