2012-05-21 17 views
9

Tôi đang gặp sự cố lạ với thao tác UIImage của mình.Dữ liệu tiết kiệm iPhone iOS thu được từ UIImageJPEGRepresentation() không thành công lần thứ hai: ImageIO: CGImageRead_mapData 'open' không thành công

Tôi đang thực hiện đồng bộ dropbox và phải lưu trữ hình ảnh của tôi dưới dạng tệp cục bộ. Để làm như vậy, tôi lưu chúng bằng cách sử dụng UIImagePNGRepresentation(image) hoặc UIImageJPEGRepresentation(image, 0.66)

Dưới đây là quy trình làm việc điển hình của tôi: tài lựa chọn một hình ảnh hoặc mất ảnh Hình ảnh được giao cho một IMAGExem Quan điểm ảnh của UIImage được lưu vào một tập tin sử dụng phương pháp này dưới đây

Tiếp theo thời gian sử dụng lại mở ứng dụng, tôi đọc hình ảnh trở lại từ các tập tin sử dụng

[UIImage imageWithContentsOfFile:fullImagePath] 

này hoạt động một lần.

Lần thứ hai tôi chạy qua thường trình, tôi nhận được thông báo lỗi được liệt kê bên dưới khi cố lưu hình ảnh vào đĩa một lần nữa.

//saving the image 
NSData* data = isPNG?UIImagePNGRepresentation(image):UIImageJPEGRepresentation(image, 0.66); 
BOOL success = [data writeToFile:filepath atomically:YES]; 
if(!success) 
{ 
    DLog(@"failed to write to file: %@",filepath); 
} 


//loading the image 
[UIImage imageWithContentsOfFile:fullImagePath] 

Tôi nhận được lỗi này khi tôi cố gắng lưu lại một hình ảnh mà trước đó đã được chuyển đổi sang JPEG hoặc PNG

2012-05-21 08:16:06.680 file already exists: NO 
ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/C1312BF8-C648-4397-82F3-D93E4FAAD35F/Documents/imageData/LogoImage.jpg' 
error = 2 (No such file or directory) 
May 21 08:16:06 <Error>: ImageIO: JPEG Not a JPEG file: starts with 0xff 0xd9 
May 21 08:16:06 <Error>: ImageIO: JPEG Application transferred too few scanlines 

Nó xuất hiện với tôi rằng lỗi này xảy ra do tôi cố gắng lưu lại ảnh dưới dạng JPEG một lần nữa. Nếu tôi yêu cầu khung nhìn hiển thị chính nó trong ngữ cảnh (tạo một hình ảnh mới có hiệu quả), thì lỗi đó không xảy ra.

Có ai biết những gì tôi đang làm sai? Tôi có thiếu một số loại siêu dữ liệu không bằng cách cố gắng chuyển đổi UIImage thành dữ liệu, tải lại và cố gắng chuyển đổi nó một lần nữa sau khi hiển thị nó cho người dùng?

+0

tôi nghĩ rằng vấn đề có thể bạn đang lưu dữ liệu với định dạng jpeg và truy nhập định dạng png tức là khi dữ liệu hình ảnh jpeg được lưu sau đó khi truy cập imageview truy cập vào nsdata của vấn đề biểu diễn png có thể ở đó –

+0

Rất giống với: http://stackoverflow.com/ câu hỏi/5081297/ios-uiimagejpegrepresentation-lỗi-không-a-jpeg-file-bắt đầu-với-0xff-0xd9 –

Trả lời

28

Tôi đã chạy vào một tính năng tương tự trước đây. Nó trông giống như imageWithContentsOfFile giữ tập tin mở miễn là UIImage nó đã được sử dụng để tạo ra vẫn còn sống. Vào thời điểm đó, tôi đã giải quyết vấn đề bằng cách đọc tệp vào một số NSData và sau đó tạo UIImage từ số NSData thay vì tệp trực tiếp.

+8

Bạn và con cái của bạn sẽ được tuyệt vời cho cõi đời đời! Điều này đã xảy ra với tôi với thư viện mở của HJCache, sử dụng HJManagedImageV. Tôi đang viết nó, vì vậy công cụ tìm kiếm nhận kết nối. Cảm ơn! –

+0

Holy crap, bạn vừa mới tiết kiệm cho tôi vài giờ làm việc. Owe bạn một. – jpm

+0

Cảm ơn bạn rất nhiều !!! Tôi đã dành phần tốt nhất trong một ngày, cố gắng để NSFileManager lưu/tải một hình ảnh chết tiệt !!! Cuối cùng với câu trả lời của bạn, nó hoạt động, cảm ơn một lần nữa :) – Supertecnoboff

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