代码之家  ›  专栏  ›  技术社区  ›  Nathan Osman

与gravatar URL混淆

  •  3
  • Nathan Osman  · 技术社区  · 14 年前

    我很难让Gravatars正常工作:

    当我请求以下内容时:

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

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

    …表示文件是 PNG 图像。

    This confuses me - I thought Gravatars were JPEG images. It seems like they can be either. How can I find out if a given image is PNG or JPEG 最好不要先下载 ?


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

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

    http://gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413?s=64&d=identicon
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   JAB    14 年前

    如果gravatar图标有您从中访问它们的服务器分配的准确的mime类型,只需检查一下。应该是 image/jpeg 对于JPEG和 image/png 对于PNGS。

    失败了…

    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。

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


    作为旁注,我最喜欢的一点关于PNG标题:

    504e47是ASCII格式的字母png,如果在文本编辑器中查看格式,则允许用户轻松识别格式。

        2
  •  0
  •   Josh K    14 年前

    结束标记是JPG,但字符串由服务器解释并发送相应的图像。In this case a PNG.