2010-06-25 81 views
3

我有一点麻烦Gravatars正常工作:混淆的Gravatar网址

当我请求如下:

 
http://gravatar.com/avatar/8a17d0d0d8bdf6a8d527bbc943a17cf8.jpg?s=64&d=identicon 

火狐自豪地展示如下:
http://files.quickmediasolutions.com/gravatar_p.png

...指示该文件是PNG图像。

这使我困惑 - 我认为Gravatars是JPEG图像。看起来他们可能是。我怎样才能找出一个给定的图像是PNG还是JPEG 最好不要先下载它


注:有些人报告说,只有的gravatar返回PNG图像。请解释这一点:

http://files.quickmediasolutions.com/gravatar_p2.png

 
http://gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413?s=64&d=identicon 

回答

1

如果Gravatar图标的准确MIME类型由您正在访问的服务器分配,请检查该图标。对于JPEG,它应该是image/jpeg,对于PNG应该是image/png

做不到这一点......

http://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header

PNG文件有8个字节的签名开始。十六进制字节值是89 50 4E 47 0D 0A 1A 0A;十进制值是137 80 78 71 13 10 26 10.

所以只需检查文件开头的八个字节;如果它是PNG,它将在这些字节中具有所述的值,如果不是,则不会。只需下载该文件,可能暂时将其存储在某处(考虑到它不应该太大,这应该不会太难),并根据标题包含的内容对其进行不同的处理。如果首先将它保存为错误的类型,则可以随时更改文件扩展名,然后使用PHP的图形库。 (或者,你不能这样做呢?)


作为一个侧面说明,关于PNG头我最喜欢的一点:

50 4E 47在ASCII,字母PNG,允许一个人如果在文本编辑器中查看该格式,则很容易识别该格式。

+0

是的。但是不要JPEG文件在那里有'JFIF'吗?不管怎样,谢谢。 – 2010-06-25 20:35:57

+0

@George:不一定(尽管通常他们确实有JFIF头)。 http://en.wikipedia.org/wiki/JPEG#JPEG_files这只是PNG头首先弹出到我的头上。 – JAB 2010-06-25 20:52:06

+0

根据我的经验,'gravatar.com'上的'Content-Type'标头值得信赖,因此您可以在不下载整个图像的情况下确定它:只需发送HTTP HEAD hequest,例如: 'curl - head' http://gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413?s = 1'' 或 'curl --head'http://gravatar.com/avatar/6dd5fae7d8f0c38b515a19a6ca4ca41d?s = 1'' – ecmanaut 2012-05-30 22:15:49

0

结束标记为JPG,但字符串由服务器解释和相应的图像发送。在这种情况下,一个PNG。

+0

Are * all * Gravatars PNG images,then?如果不是,我怎样才能告诉个人什么格式呢? – 2010-06-25 19:28:40

+0

它们全部以PNG格式发送。 – 2010-06-25 19:30:05

+0

@George,是的,他们都是以PNG的形式发送的。 – 2010-06-25 19:33:42