让Gravatars正常工作我遇到了一些麻烦:
当我要求以下内容时:
http://gravatar.com/avatar/8a17d0d0d8bdf6a8d527bbc943a17cf8.jpg?s=64&d=identicon
Firefox自豪地展示以下内容:
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
答案 0 :(得分: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,如果在文本编辑器中查看,则允许用户轻松识别格式。
答案 1 :(得分:0)
结束标记是JPG,但字符串由服务器解释并发送相应的图像。在这种情况下是PNG。