图像处理PHP - GD vs IMagick

新利在线娱乐网——2011年7月19日,星期二

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

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

内置的. 因为版本4.默认情况下,GD已经和PHP绑定了一个版本. 这甚至不是什么大问题,除了为PHP设置IMagick相当麻烦. 特别是在Windows上. 尤其是在IIS. 这不是我通常推荐用于生产的配置, 但这是我最常为当地发展奔走的地方. 在浏览了无数套DLL要使用的指令后, 许多人建议将ImageMagick程序一个版本地降级,直到找到一个可以使用该扩展的版本, 或者建议使用Apache(我并没有使用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.