2010-10-03 13 views
14

Khi tạo một UIImage với tham nhũng dữ liệu/không đầy đủ JPEG, giao diện điều khiển sẽ in ralỗi bắt: dữ liệu tham nhũng JPEG: kết thúc sớm của phân đoạn dữ liệu

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

Những hình ảnh đầy đủ sẽ được hiển thị, với đầy màu xám lên phần không đầy đủ. Tôi không muốn điều này xảy ra.

Tôi đã cố gắng hết sức với một khối try-catch nhưng nó không phát hiện lỗi. Có cách nào để bắt lỗi không?

Trả lời

13

Phụ thuộc vào cách bạn đang nhận được dữ liệu vv Có lẽ đây là những gì bạn đang tìm kiếm: iphone-corrupt-jpeg-data-for-image-received-over-http

Một cách đơn giản để kiểm tra xem dữ liệu JPEG là hoàn chỉnh hoặc không được kiểm tra đầu tiên và cuối cùng hai byte cho FF D8 và FF D9 tương ứng. Hai byte này xác định đầu và cuối của một tệp JPEG tương ứng.

+1

này sẽ làm việc như một giải pháp cho mục đích của tôi. Nhưng tôi vẫn còn tò mò làm thế nào lỗi có thể được bắt. – samwize

+1

2 byte đầu tiên phải là FF D8 – samwize

+1

vì vậy nếu tôi có JPG được biểu thị dưới dạng NSData từ đĩa iOS, tôi sẽ kiểm tra 2 chữ số cuối bằng cách nào? – Slee

23

Trả lời câu hỏi của Slee ở trên, đây là phương pháp tôi sử dụng:

-(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 Cảm ơn bạn về đoạn mã mô-đun! – Jean

+0

+1 Tuyệt vời! hoạt động tuyệt vời, cảm ơn – avishic

+0

Cảm ơn, công việc gr8! –