Я столкнулся со странной проблемой при работе с 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 в данные, перезагрузить его и попытаться преобразовать еще раз после отображения пользователю?