【问题标题】:What's so special about this PNG file?这个PNG文件有什么特别之处?
【发布时间】:2016-04-01 03:09:26
【问题描述】:

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

multipart 有图片吗?

我确定多部分编码是正确的。从我的应用程序上传了数以万计的图像,没有这个问题。这是第一次。

我猜这个 PNG 文件有什么特别之处,我证明了这一点:

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

所以这个PNG文件确实很特别,而且相当多的应用程序和服务器不能正确处理它。但是我不知道它有什么特别之处,希望比我更了解PNG的人可以提供帮助。谢谢。

【问题讨论】:

  • 我下载并打开它,它非常好并且有效(在大黑色背景上显示女性面孔)
  • @Aganju 您可以尝试在浏览器中打开它。你投了反对票吗?
  • 仅供参考,我尝试在 Adob​​e LightRoom (CC 2015) 中打开它,它还说它是 “不支持的格式”(我做了 not 否决它 - 我为什么要)
  • @Aganju 好的。谢谢。但是很多软件都可以处理它,包括网络浏览器和 OS X 系统。实际上我的应用程序可以正确显示它。只有在上传到服务器时才会出现问题。我想在我的情况下是服务器无法处理这个 PNG 文件。无论如何,这个PNG文件一定有一些奇怪的地方,我想知道它。
  • 您一直说问题在于将文件上传到您的服务器。它不是。但是,Apple 软件可以显示它,因为它们很可能使用共享代码库(如您所说,包括您的移动设备和本地浏览器和查看器),但符合标准的 PNG 查看器不能。

标签: ios png multipartform-data


【解决方案1】:

这是一个CgBI 文件,不是PNG,很可能是用Apple 的流氓修改过的pngcrush 制作的。

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

CgBI 文件可以被多个应用程序转换为有效的 PNG 文件(透明区域被不可修复损坏除外),包括

  • Jongware 的pngdefry
  • Apple 的“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)
...

【讨论】:

  • 谢谢!我相信这是原因。你知道四字节关键块的位置是否固定在16~19字节吗?我需要正确识别 CgBI 格式,以便将其转换为普通 PNG。
  • 额外的块(除了其特殊的非法位置)是一个常规的 PNG 块。您可以像读取任何其他 PNG 块一样读取大小。
  • 抱歉误导了你。 CgBI 应该在字节 12-15 中。
  • 我相信如果你再数一遍你会看到:8950 4e47 0d0a 1a0a 0000 0004 4367 4249。
  • 虽然它有点隐藏在规范中,但很清楚:IHDR 块应该是数据流中的第一个块。因此,此文件不是有效的 PNG。有些读者可能不会强制执行此规则,因此无论如何都会显示它。
猜你喜欢
  • 2011-10-20
  • 2021-06-10
  • 2011-11-22
  • 2011-04-18
  • 2017-02-19
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多