3

我在让 Gravatars 正常工作时遇到了一些麻烦:

当我要求以下内容时:

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

Firefox 自豪地显示以下内容:http:
//files.quickmediasolutions.com/gravatar_p.png

...表明该文件是PNG图像。

这让我很困惑——我认为 Gravatar 是 JPEG 图像。似乎他们都可以。如何确定给定图像是 PNG 还是 JPEG ,而不需要先下载


注意:有些人报告说 Gravatar 只返回 PNG 图像。请解释一下:

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

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

2 回答 2

1

如果 Gravatar 图标具有由您访问它们的服务器分配的准确 MIME 类型,请检查。它应该image/jpeg适用于 JPEG 和image/pngPNG。

做不到...

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,如果在文本编辑器中查看,则允许人们轻松识别格式。

于 2010-06-25T20:01:29.773 回答
0

结束标签是JPG,但字符串由服务器解释并发送相应的图像。在这种情况下是 PNG。

于 2010-06-25T19:27:14.623 回答