PHP中的图像操作- GD vs IMagick

九游会客户端——2011年7月19日,星期二

最近我一直在PHP中使用GD和ImageMagick进行图像操作. 这两个库都非常有用,但它们在许多方面有很大的不同. 我想我应该利用这个机会来回顾一下其中的一些差异,并就不同的用途提供一些更好的建议.

批处理. ImageMagick有,GD没有. IMagick (PHP扩展名为IMagick)允许您使用一个对象加载多个图像文件,并一次对所有这些文件执行相同的操作. 当然,使用GD总是可以依次打开每个文件并执行操作, 但是就编写的代码和处理时间而言,这种方法的效率要低一些.

内置的. 因为版本4.3、GD的一个版本已经默认与PHP绑定. 这并不是什么大问题,只是为PHP设置IMagick相当麻烦. 特别是在Windows上. 尤其是在IIS. 我通常不建议在生产环境中使用这种配置, 但这是我最常为当地发展运营的项目. 在浏览了无数套指令后,DLL要使用, 许多人建议一个版本一个版本地降级ImageMagick程序,直到找到一个可以使用扩展的程序, 或者建议使用Apache(我没有使用它),)的DLL, 和ImageMagick都是用VC6编译的, 我终于找到了一种可行的配置. 在我的例子中,我只需要将PHP升级到5.3. ImageMagick的最新版本(6.7.1-0)工作与NTS DLL从 http://valokuva.org/?page_id=50. 也就是说,很多主机服务已经安装了IMagick.

图像合成. IMagick有一些非常酷的组合图像的方法,但是 Imagick: compositeImage 强制将整个图像放在另一个图像上. 当然你可以先剪裁, 但是,如果您仍然需要源映像,则需要在此之前克隆它. 另一方面,GD imagecopyresampled 特别是允许您非常容易地复制一个图像的一部分到另一个, 调整大小,甚至插值像素. 要在IMagick中完成同样的操作,需要几个步骤. 在有利的一面, IMagick在处理像素缓冲区方面很聪明, 因此,克隆图像资源来裁剪它不会导致内存使用量翻倍. 进一步, IMagick允许复制特定的通道,这在许多情况下非常有用.

速度. IMagick拥有许多GD没有的内置函数, 也因为它通过API作为一个单独的程序运行, 它不会被迫以非编译PHP的高度抽象速度运行. 因此, 对于很多复杂的函数, 比如模糊和阴影, 以我的经验, IMagick要快得多. 当应用阴影到2400 x 2400像素的图像, 使用IMagick的克隆, 油漆不透明, 模糊, 评估, 和组合函数(因为内置的阴影函数没有足够的选项,)大约用了30秒, 而GD中的逐像素操作在300秒时超时.

最终, 您所做的具体操作将决定哪个库最适合您的情况. 如果您要将100张图像转换为带有天蓝色边框的灰度缩略图, IMagick是你最好的选择. 但如果你从一个图像精灵动态添加水印,每次一个图像, GD可能会更容易一些. 如果您不确定您的生产环境, 您可能还需要考虑GD是与PHP绑定的,而IMagick不是. 当然,还有其他用于PHP的图像操作库.

九游会客户端
九游会客户端是一家专注于全方位服务的创意机构 网页设计打印身份品牌界面设计视频制作静止摄影 而且 运动设计. 用我们对卓越的热情,多元文化背景,和 获奖 实践, 我们一贯提供高品质的, 自定义, 创新的解决方案,以满足客户多样化的营销需求. 欲了解更多信息,请访问 www.MatchaDesign.com.