2010-10-03 35 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

相關問題