2015-06-20 14 views
5

tải xuống ứng dụng mM một số hình ảnh mới từ chương trình phụ trợ Parse.com của tôi. mã ví dụ:Tải xuống hình ảnh từ Parse.com và kiểm tra hình ảnh không bị hỏng

//Where object is a downloaded PFObject 
PFFile *image = object[@"image"]; 
[image getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { 

    if(!error) { 
     UIImage *image = [UIImage imageWithData:data]; 
     //Do more work here… 
    } 
} 

Tuy nhiên tôi đã nhận thấy rằng nếu có một vấn đề với các kết nối hoặc một số loại lỗi chung hình ảnh sẽ được tải về (không có lỗi) nhưng hình ảnh sẽ bị bóp méo với dòng lởm chởm màu đen và không hoàn thành. Có cách nào để kiểm tra xem hình ảnh đã tải xuống có còn nguyên vẹn và không bị bóp méo không?

+0

Có thể là lỗi Parse – Alistra

+0

Cũng tự hỏi về điều này, có vấn đề trong đó một nửa hình ảnh sẽ tải xuống do đó nửa dưới sẽ có màu đen. Hoặc hình ảnh sẽ trông giống như nó có một bộ lọc màu vàng lạ trên đó. Gặp phải vấn đề này trên Parse 1.7.5 – Drenguin

Trả lời

0

Tôi cũng gặp sự cố này trước, tôi kiểm tra tiêu đề và so sánh Nội dung có độ dài với dữ liệu hoàn tất tải xuống.

Trong trường hợp máy chủ web hoạt động bình thường và có thể trả lời đúng cho Nội dung dài, bạn có thể sử dụng nó để kiểm tra dữ liệu.

Dưới đây là một đoạn để tải về chỉ tiêu đề của yêu cầu:

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease]; 
request.HTTPMethod = @"HEAD"; 
NSHTTPURLResponse *response; 
[NSURLConnection sendSynchronousRequest:request 
        returningResponse:&response 
           error:nil]; 

if ([response respondsToSelector:@selector(allHeaderFields)]) { 
    NSDictionary header = [response allHeaderFields]; 
    NSString *rawContentLength = [header objectForKey:@"Content-Length"]; 
    NSNumber *contentLength = [NSNumber numberWithInt:[rawContentLength intValue]]; 
    // Convert contentLength to NSUInteger and use to compare with you NSData length. 
} 

bạn cũng có thể sử dụng nó với NSHTTPURLResponse bạn sử dụng để tải về hình ảnh để lưu yêu cầu HTTP.

Tiếp theo là lấy độ dài của NSData. Bạn có thể sử dụng phương pháp:

NSUInteger dataLength = [downloadedData length]; 

Sau đó so sánh cả hai giá trị, nếu hai chiều dài bằng nhau, nó tải xuống hoàn tất, bạn sẽ cần phải tải xuống lại.

Bạn cũng có thể kiểm tra xem hình ảnh có bị hỏng hay không bằng cách đọc tiêu đề Loại nội dung và kiểm tra một số byte đầu tiên và cuối cùng của dữ liệu.

Đối với PNG How to check if downloaded PNG image is corrupt? Đừng quên truyền "byte" sang "char", bạn sẽ thấy cảnh báo.

Đối với JPEG Catching error: Corrupt JPEG data: premature end of data segment

Hy vọng điều này có thể giúp bạn. :)

+0

còn Parse thì sao? – Kex

+0

Tôi thấy, chúng tôi có cùng một vấn đề nhưng các công cụ khác nhau. Bạn có thể kiểm tra ** dữ liệu ** bên trong ** nếu ** trước ** imageWithData ** không? Trong trường hợp đó, bạn vẫn có thể kiểm tra xem dữ liệu hình ảnh có bị hỏng hay không nếu bạn biết loại hình ảnh. Nếu hình ảnh bị hỏng thì bạn có thể tải xuống lại hình ảnh đó. Tôi nghĩ rằng tôi sẽ loại bỏ câu trả lời về việc kiểm tra Content-Length trong tiêu đề vì nó không hoạt động ở đây. – spicydog

Các vấn đề liên quan