检测目标C中PNG文件是否已损坏

Chr*_*nes 4 png corrupt objective-c nsurlrequest

我正在使用NSURLRequest下载jpgs和png.这工作正常,但有时文件已损坏.我见过捕获错误:损坏的JPEG数据:数据段的过早结束,并且这适用于jpgs.有没有人知道为png做同样的方法?即以编程方式检查png数据是否有效......

leo*_*loy 7

PNG格式有几个内置检查.每个"块"都有CRC32检查,但要检查您是否需要读取完整文件.

更基本的检查(当然不是万无一失)是读取文件的开头和结尾.

前8个字节应始终为以下(十进制)值{ 137, 80, 78, 71, 13, 10, 26, 10 }(ref).特别是,第二到第四字节对应于ASCII字符串"PNG".

以十六进制表示:

89 50 4e 47 0d 0a 1a 0a
.. P  N  G  ...........
Run Code Online (Sandbox Code Playgroud)

您还可以检查文件的最后12个字节(IEND块).中间4个字节应对应于ASCII字符串"IEND".更具体地说,最后12个字节应该是(以hexa为单位):

00 00 00 00 49 45 4e 44 ae 42 60 82
........... I  E  N  D  ...........
Run Code Online (Sandbox Code Playgroud)

(严格地说,PNG文件以12个字节结束并不是必须的,IEND块本身表示PNG流的结束,因此文件原则上可以有额外的尾随字节,PNG读取器会忽略这些字节.在实践中,这是非常不可能的).