代码之家  ›  专栏  ›  技术社区  ›  an0

这个PNG文件有什么特别之处?

  •  1
  • an0  · 技术社区  · 9 年前

    此PNG file 无法从我的应用程序上传到3d派对服务器。它总是报告此错误:

    multipart有图像吗?

    我确信多部分编码是正确的。我的应用程序上传了数万张图片,但没有出现这个问题。这是第一次。

    我想这个PNG文件有点特别,我证明了这一点:

    1. Dropbox iOS应用程序无法显示图像。
    2. Tweetbot无法上传。错误消息为“媒体类型无法识别”。

    因此,这个PNG文件确实很特殊,一些应用程序和服务器无法正确处理它。但我不知道它有什么特别之处,希望比我更了解巴布亚新几内亚的人能帮忙。谢谢

    1 回复  |  直到 9 年前
        1
  •  3
  •   Glenn Randers-Pehrson    9 年前

    这是一个 CgBI 文件,而不是PNG,很可能是用苹果的恶意修改的pngcrush制作的。

    此类文件始终包含字节12-15中的“CgBI”,其中“IHDR”属于。

    CgBI文件可以由几个应用程序转换为有效的PNG文件(除了透明区域受到无法修复的损坏),包括

    • Jongware的 pngdefry
    • 苹果的“pngcrush”(但不是真的 pngcrush )
    • 上述CgBI wiki页面上列出的其他

    以下是文件中的前几个字节:

    $ od -c test.png | head -4
    0000000 211   P   N   G  \r  \n 032  \n  \0  \0  \0 004   C   g   B   I
    0000020   P  \0     002   + 325 263 177  \0  \0  \0  \r   I   H   D   R
    0000040  \0  \0  \0   `  \0  \0  \0   `  \b 006  \0  \0  \0 342 230   w
    0000060   8  \0  \0  \0       c   H   R   M  \0  \0   z   %  \0  \0 200
    

    这些字节表示以下内容:

    PNG signature 0-7
    CgBI length 8-11
    "CgBI" 12-15
    CgBI data 16-19
    CgBI CRC 20-23
    IHDR length 24-27 (should be in 8-11)
    "IHDR" 28-31 (should be in 12-15)
    width 32-35 (should be in 16-19)
    height 36-39 (should be in 20-23)
    bit depth 40 (should be in 24)
    color type 41 (should be in 25)
    compression 42 (should be in 26)
    filter method 43 (should be in 27)
    interlace method 44 (should be in 28)
    IHDR CRC 45-48 (should be in 29-32)
    ...