动态获取图像尺寸的最快方法

6

提高页面加载速度的一种方法是指定图像尺寸(高度和宽度)。在PHP中,可以使用getimagesize()来实现,但如果有很多图像,执行速度可能会很慢。

动态获取许多图像的图像尺寸,并对页面加载影响最小的最佳方法是什么?我们正在谈论50多张图片。


你是觉得它会慢,还是已经测试过了? - Maerlyn
我认为它实际上并没有加速网站,但可以避免在图像加载时页面改变形状(感觉更快)。无论如何,问题是关于比运行getimagesize()更快地获取尺寸,而getimagesize()有许多其他用途。 - jerclarke
4个回答

7

我刚刚测试了55个5+MB的图片:

Imagemagick的getImageGeometry花费了5.3秒(因为在每个文件之后必须重新创建imagick对象),而getimagesize在0.032秒内遍历了这些图片。后者是完全可以接受的。

如果不行,就将尺寸存储在数据库中。

编辑:此外,如果通过TCPIP获取文件,则会大大降低处理速度。因此,如果您这样调用它:

getimagesize('http://www.blabla.com/pic.jpg');

而不是

getimagesize('localdir/hereiam/pic.jpg');

您会得到一些网络开销。

此外,如果这些图片始终具有EXIF数据(由数字相机制作),则可以使用PHP exif_函数,如:exif_read_data。

问题:您使用的是哪个PHP版本?旧的4.x版本在某些文件系统上使用getimagesize时存在较小的问题。


2
是的,getimagesize() 可能会在处理大型图片时变慢,而且它还依赖于服务器。如果您有大量图片集合,并希望在页面上显示每个图像的分辨率,我建议使用数据库来实现。每当上传或修改图像时,都会使用 getimagesize()
这也将使创建更多功能的图像集合成为可能,因为您可以使用 SQL 语句按照自己的喜好对图片进行分组。例如“显示今天的图片”,“显示上周的图片”等等。
如果您的图片集合很小,而且图像数据库不是一个选项,您应该首先尝试使用普通的 getimagesize(),以查看站点的性能表现。

0

已经有一段时间了,但你是否也有 PHP 版本的代码? - bcbishop
据我所知,它适用于所有的php版本。我使用它与php 5.4一起。 - Nicolás López
抱歉,我有点困惑,这是 Ruby 代码,它怎么能在 PHP 中运行呢?你有一个示例可以让我在我的 PHP 代码中使用吗? - bcbishop
谢谢!我用了它,但与我从getimagesize(php函数)获得的性能收益相比,并不那么显著。你有测量Ruby版本的性能吗? - bcbishop
不行。最快的方法是将尺寸保存在某个地方或图像名称中,例如:imagename-400-500.jpg - Nicolás López

0

我相信你所说的不是图标和设计图片,而是用户和编辑上传到服务器的动态图片。

如果是这种情况,我会在上传时调整图片大小,并始终知道它们的尺寸。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接