Сохранение данных iPhone iOS, полученных из UIImageJPEGRepresentation(), завершается ошибкой второй раз: ImageIO: ошибка CGImageRead_mapData 'open'
У меня странная проблема с манипуляциями с UIImage.
Я делаю синхронизацию в Dropbox и должен хранить свои изображения в виде локальных файлов. Для этого я сохраняю их, используя UIImagePNGRepresentation(image)
или же UIImageJPEGRepresentation(image, 0.66)
Вот мой типичный рабочий процесс: пользователь выбирает изображение или делает фотографию. Изображение назначается для imageView. UIImage вида изображения сохраняется в файл, используя метод ниже
В следующий раз, когда пользователь снова откроет приложение, я прочитал изображение обратно из файла, используя
[UIImage imageWithContentsOfFile:fullImagePath]
Это работает один раз.
Во второй раз, когда я запускаю процедуру, я получаю сообщение об ошибке, перечисленное ниже, при попытке сохранить образ на диск еще раз.
//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]
Я получаю эту ошибку при попытке повторно сохранить изображение, которое ранее было преобразовано в JPEG или 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
Мне кажется, что эта ошибка происходит из-за того, что я снова пытаюсь сохранить изображение в формате JPEG. Если я прошу представление визуализировать себя в контексте (эффективно создавая новое изображение), ошибка не произойдет.
Кто-нибудь знает, что я делаю не так? Я пропускаю какие-то метаданные, пытаясь преобразовать UIImage в данные, перезагружая их и пытаясь преобразовать еще раз после отображения их пользователю?
1 ответ
Я сталкивался с чем-то похожим раньше. Это выглядело как imageWithContentsOfFile
оставил файл открытым до тех пор, пока UIImage
он был использован для создания был еще жив. В то время я решил проблему, прочитав файл в NSData
а затем создание UIImage
от NSData
вместо файла напрямую.