【问题标题】:quickest way to dynamically retrieve image dimensions动态检索图像尺寸的最快方法
【发布时间】:2011-03-21 00:45:03
【问题描述】:

改善页面加载的一种方法是指定图像尺寸(高宽)。在 PHP 中,这可以通过 getimagesize() 来完成,但是我可以想象如果你有很多图像,这会很慢。

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

【问题讨论】:

  • 您认为它很慢,还是您实际测试过?
  • 我不认为它实际上加速了网站,但避免了页面在加载图像时改变形状(感觉更快)。无论哪种方式,问题都是关于获得尺寸比运行 getimagesize() 更快,后者还有许多其他用途。

标签: php optimization image performance


【解决方案1】:

是的,getimagesize() 可能会很慢,尤其是在大图像上,而且它还取决于服务器。如果您有一个大型图像集合,并且您想在页面上显示每个图像的分辨率,我可能会为此使用数据库。每当上传或修改图像时使用getimagesize()

这也可以创建一个更通用的图像集合,因为您可以使用 SQL 语句对图片进行任何您喜欢的分组。例如“显示今天的照片”、“显示上周的照片”等。

如果您的收藏量很小并且无法选择图像数据库,您应该首先尝试使用普通的getimagesize() 来测试您的网站的性能。

【讨论】:

    【解决方案2】:

    我刚刚测试了 55 张 5MB 以上的图片:

    Imagemagick 的 getImageGeometry 采用 5.3 seconds(因为在每个文件之后您必须重新创建 imagick 对象),而 getimagesize 则通过 0.032 seconds 中的图像。后者是完全可以接受的。

    如果没有,则将维度存储在数据库中。

    编辑:此外,如果您通过 TCPIP 获取文件,则会大大减慢该过程。所以,如果你这样称呼它:

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

    代替

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

    你会得到一些网络开销。

    另外,如果这些图片始终有 EXIF 数据(用数码相机制作),那么您可以使用 PHP exif_ 函数,例如:exif_read_data。

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

    【讨论】:

      【解决方案3】:

      我相信您不是在谈论图标和设计图像,而是在谈论由用户和编辑器上传到服务器的动态图像。

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

      【讨论】:

        【解决方案4】:

        我知道的获取图像大小的最快方法

        https://github.com/tommoor/fastimage

        【讨论】:

        • 好久不见,请问您也有php版本的代码吗?
        • 据我所知,它适用于所有 php 版本。我将它与 php 5.4 一起使用
        • 对不起,我很困惑,这是 ruby​​ 代码,它如何与 php 一起工作?你有一个我可以在我的 php 代码中使用它的例子吗?
        • 谢谢!我使用了它,但与我从 getimagesize(php 函数)获得的相比,性能提升并不显着。你测量过 ruby​​ 版本的性能吗?
        • 不。最快的方法是将大小保存在某个位置或图像名称中,如下所示:imagename-400-500.jpg
        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多