PHP图像优化器

时间:2011-07-08 07:13:46

标签: php image api optimization

我们正在构建一个可以上传大量图片的网络应用。哪个是优化这些图像并将其存储在网站上的最佳解决方案?

还有一种方法可以自动增强正在上传的图像吗?

2 个答案:

答案 0 :(得分:11)

  1. 不要将图像存储在数据库中,将它们存储在文件系统中(作为真实文件)。您可能需要在数据库中存储有关它们的信息,例如文件名,上传时间,大小,所有者等。
  2. 文件名必须是唯一的。您可以使用yyyymmddhhiissnnnn,其中yyyymmdd是年,月和日,hhiiss - 小时,分钟和秒,nnnn - 该秒中的图片数量,即{第一张图片为{1}},第二张图片为0001等。这将为您提供精美订单的唯一文件名。
  3. 考虑制作一些逻辑目录结构。在单个文件夹中存储数百万个图像并不是一个好主意,因此您需要具有0002之类的内容。这也可以跨越多个服务器。
  4. 保留原始图像。你永远不会知道一两年后你想用什么图像。您可以将它们转换为某种通用格式,即,如果您允许上传JPG,PNG和其他格式,则可以将它们全部存储为JPG。
  5. 创建并存储网站所需的各种已调整大小的图像。例如,社交网络通常有3种调整大小的图像 - 一种用于在各个地方显示用户评论(非常小),一种用于在个人资料页面中显示(非常小,但不像图标;可能是一些240x320像素)和一个用于“全尺寸”观看(通常小于原始尺寸)。这些相关图像的文件名应该类似于原始图像的文件名,例如,后缀images/<x>/<y>/<z>/<filename>_icon_profile可以被添加到原始图像的文件名中。根据您的资源和同时上传的图像数量,您可以实时(在相同的HTTP请求中)或使用一些后台处理(连续检查是否有新图像的cron作业)转换)。
  6. 至于自动增强图像 - 这是可能的,但前提是你确切知道必须对图像做些什么。我认为分析每个图像并决定应该用它做什么可能过于复杂并且占用太多资源。

答案 1 :(得分:2)

以上来自binaryLV的所有好建议。添加到他的建议#5,您可能还想优化您创建的缩略图。上传图像时,它们可能具有缩略图不需要的元数据。您可以无损地删除元数据以缩小缩略图大小,如下所示:http://code.google.com/speed/page-speed/docs/payload.html#CompressImages。我个人在我的网站的图像上使用jpegtran,以便在创建时自动优化我的缩略图。如果您需要元数据,可以从原始图像中获取元数据。

如果您计划为用户显示这些图像,需要考虑的其他事项是将您的图像托管在无cookie的域或子域中,如下所述:http://developer.yahoo.com/performance/rules.html#cookie_free。如果图像托管在具有cookie的域或子域上,则每个图像将沿着不必要的cookie发送。它可以为每个请求的图像节省几KB,这可以增加相当多的量,特别是在受限制的带宽连接上,例如在移动设备上。