2010-10-03 30 views
14

当创建与损坏的/不完整的JPEG数据的的UIImage,控制台将打印出捕捉错误:损坏JPEG数据:数据段的过早结束

<Error>: Corrupt JPEG data: premature end of data segment

的不完整的图像将被显示,用灰色填充不完整的部分。我不希望发生这种情况。

我拼命尝试try-catch块,但它没有捕获到错误。有什么方法可以捕捉错误?

回答

13

取决于你如何获取数据等。也许这是你在找什么:iphone-corrupt-jpeg-data-for-image-received-over-http

一个简单的方法来检查,如果JPEG数据是完整的还是不被检查的第一个和最后两个字节分别为FF D8和FF D9。这两个字节分别标识JPEG文件的开始和结束。

+1

这将工作作为我的目的的解决方案。但我仍然很好奇这个错误是如何被捕获的。 – samwize 2010-10-04 01:48:45

+1

前2个字节应该是FF D8 – samwize 2010-10-04 01:53:21

+1

,所以如果我从iOS磁盘中将JPG表示为NSData,我将如何检查最后2位数字? – Slee 2012-06-12 16:46:25

23

针对上述斯利的问题,这是我使用的方法:

-(BOOL)dataIsValidJPEG:(NSData *)data 
{ 
    if (!data || data.length < 2) return NO; 

    NSInteger totalBytes = data.length; 
    const char *bytes = (const char*)[data bytes]; 

    return (bytes[0] == (char)0xff && 
      bytes[1] == (char)0xd8 && 
      bytes[totalBytes-2] == (char)0xff && 
      bytes[totalBytes-1] == (char)0xd9); 
} 
+1

+1谢谢你的模块化代码片段! – Jean 2012-07-31 12:46:13

+0

+1太棒了!工作很好,谢谢 – avishic 2013-01-10 18:00:35

+0

谢谢,gr8工作! – 2015-01-22 14:24:53

相关问题