Php 组合2个imagesmagick resize命令

Php 组合2个imagesmagick resize命令,php,optimization,imagemagick,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 3

我必须通过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);
?>


有没有一种方法可以将此合并到一个exec?不启动转换2次?

ImageMagick命令行的文档清楚地表明,不支持多个输出:您唯一的选择是直接使用或PHP API,而不是命令行(提示:使用
Imagick::clone
imagecreatetruecolor
/
imagecopy
功能)

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


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

关于优化图像缩小步骤的主题,而不直接回答您的问题(像CAFxX一样,我从未见过将两个输出转换为一个ImageMagick命令的方法)

一个选项是使用第一个命令从中等大小的图像创建较小的缩略图。即:

  • 将高分辨率源图像缩小到500x500
  • 将500x500图像从步骤1缩小到90x90
  • 这当然有助于提高速度。我也曾在某个地方读到(恐怕链接让我忘了)这不会让质量比从全尺寸缩小到90x90更差,而且实际上可以让它看起来更好


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

    GD对我的应用程序来说会变慢,ImageMagick API是否比直接使用ImageMagick更快?我不明白它是如何做到的再慢一点。此外,ImageMagick命令行的文档清楚地表明,不支持多个输出。对我的答案,我投了不必要的反对票。我对你们两个投了赞成票,对我来说,这似乎是一个有效的问答。