3

我知道的某个站点最近将他们的带宽从每月 2.5 TB 升级到了 3.5 TB。

原因是他们最近超过了 2,5 限制。他们抱怨他们不知道如何降低带宽使用率。

我没有看到他们考虑的一件事是 JPEG 和网站上显示的其他图像(它是一个图像密集的网站)可以包含元数据。照片是在哪里拍的等等。

事实是,这些信息在那个网站上根本不重要。它永远不会被使用。然而,它仍在增加带宽,因为它将每个图像的文件大小从几个字节增加到几千字节。

在一个每月使用超过 2,5 TB 的网站上,剥离其元数据的数千张图像将有助于将带宽使用量减少至少几个 GB,我认为如果不是更多的话。

那么有没有办法在 PHP 中做到这一点?而且,对于已经存在的文件,有人知道一个好的自动元数据删除器吗?我知道JPEG & PNG Stripper,但这不是很好......虽然可能对初始清洁很有用......

4

7 回答 7

6

这对 GD 来说是微不足道的:

$img = imagecreatefromjpeg("myimg.jpg");
imagejpeg($img, "newimg.jpg", $quality);
imagedestroy($img);

这不会传输 EXIF 数据。虽然不知道它实际上会节省多少带宽,但您可以使用上面的代码来增加图像的压缩率。这将节省大量带宽,尽管它可能不会很受欢迎。

于 2009-03-24T11:17:28.427 回答
5

我严重怀疑图像元数据是万恶之源。

需要考虑的一些问题:

  • 网络服务器是如何配置的?
  • 它是否正确发出 http 304 响应?
  • 是不是有某种通过 php 脚本手工制作的数据缓存/流式传输来防止所述数据被浏览器缓存?(在这种情况下,应该考虑 url 重写和 http 重定向)。
于 2009-03-24T11:22:05.077 回答
3

我认为您需要对此进行分析。节省几 GB 可能是对的,但在 2.5TB 的带宽上相对较少。您需要有关服务最多的真实数据并为此努力。如果您确实发现是图像使您的带宽使用率如此之高,您首先应该检查您的缓存标头和 304 响应,您可能还想使用类似 amazon S3 之类的东西来为您的图像提供服务。通过这样做,我已经设法降低了很多带宽成本。

也就是说,如果 EXIF 数据真的有那么大的不同,那么您可以使用 GD 库使用imagejpeg函数复制 jpeg 图像。这不会复制 EXIF 数据。

于 2009-03-24T11:23:47.430 回答
3

看看Smush.it!它将从图像中删除所有 un-necs 信息。他们有一个API,你可以用它来处理图像。

注意: 根据设计,它可能会更改您的文件类型。这是故意的。如果另一种文件类型可以以相同的质量显示相同的图像,并且字节数更少,它将为您提供一个新文件。

于 2009-03-24T12:57:27.097 回答
2

Emil H 可能是最好的解决这个问题。

但我想补充一点,这几乎肯定不会像你想象的那样为你节省很多。这种类型的元数据占用的空间很小;我会认为

  1. 将图像重新压缩为更小的文件大小,以及
  2. 裁剪或调整大小以降低图像的分辨率

两者都会产生更大的影响。仅使用第一点,您可能会降低 50% 的带宽,而使用这两种方法,您可能会降低 80% 的带宽 - 也就是说,如果您愿意牺牲一些图像大小。

如果没有,您可以始终使用较小尺寸的默认视图,并带有“放大”链接。大多数人只是浏览会看到较小的图像,只有那些想要最大尺寸的人才会点击放大它,因此您仍然可以获得几乎所有的带宽节省。例如,这就是 Flickr 所做的。

于 2009-03-24T11:46:18.827 回答
0

也许某种十六进制数据操作会在这里有所帮助。我面临同样的问题并正在研究某种自动化解决方案。

只是想知道这是否可以做到,如果可能的话,我会为此编写一个 php 类。

于 2009-06-23T00:11:26.700 回答
0

在客户端进行所有图像处理可能很聪明(使用诸如facebook之类的java小程序),然后当图像被压缩,调整大小并完全去除不必要的像素和内容时,它可以以最佳大小上传,节省带宽和服务器端性能!(以初始开发为代价)

于 2009-06-23T00:16:10.340 回答