我应该为ImageMagick使用PHP扩展还是只使用PHP的Exec()函数来运行终端命令?

时间:2011-11-25 04:48:39

标签: php image image-processing imagemagick

我需要对我网站上的用户上传的图片进行以下图片处理:

  1. 调整图像大小(如果大于某个维度)
  2. 将所有图片格式转换为jpg的
  3. 在所有图像的底部添加水印
  4. 我是否需要使用MagickWand或iMagick扩展,还是可以在PHP的exec函数中运行终端命令?

    是否有理由将PHP扩展作为首选?哪个会更快更好的性能(这个网站可能有很多用户,在任何给定时间都会有大量的图像处理)?

3 个答案:

答案 0 :(得分:9)

使用PHP扩展而不是使用exec或类似函数,您将获益良多。内置扩展将更快并使用更少的内存,因为您不必生成新进程并读取输出。图像对象将直接在PHP中使用,而不必读取文件输出,这样可以使图像更易于使用。

如果你有一个繁忙的网站,创建大量的进程来编辑图像可能会开始减慢速度并消耗额外的内存。

答案 1 :(得分:6)

我想与drew010的答案形成对立。在他的回答中他说:

  

使用PHP扩展而不是使用exec,您将获益良多   或类似的功能。内置扩展将更快,使用更少   内存,因为您不必生成新进程并读取输出   回

对于处理图像,这是事实。好吧,我知道使用PHP的exec()函数(或类似函数)调用ImageMagick二进制文件会带来额外的开销,使用嵌入式PHP库但是我不清楚开销是多少有。。

但硬币还有另外一面。如果您通过扩展将ImageMagick代码嵌入到PHP中,那么使用PHP的每个请求都会占用更多内存,无论请求是否处理图像。如果您正在使用Apache的mod_php,那么这甚至会成为更多的问题,因为现在对服务器的每个请求都有ImageMagick库,即使它正在提供HTML文件!

所以它真的取决于。你真的想让PHP的内存占用尽可能低。如果您正在处理大量需要ImageMagic并且您正在使用FastCGI或php_fpm的请求,那么您可能会看到使用嵌入式ImageMagick的好处。但是,如果您只是偶尔使用ImageMagick处理请求和/或使用Apache的mod_php,那么通过exec()调用ImageMagick可以获得更好的性能。

答案 2 :(得分:1)

我总是使用PHP GD http://php.net/manual/en/book.image.php

您可以完成调整大小,转换为JPG并为图像添加水印。我知道你的帖子说你必须使用MagickWand或iMagick,但我只是想提出这个选项,以防它适合你。