我的 UIImage 操作遇到了一个奇怪的问题。
我正在做一个保管箱同步,并且必须将我的图像存储为本地文件。为此,我使用UIImagePNGRepresentation(image)
or保存它们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 转换为数据、重新加载它并在向用户显示后再次尝试转换它,我是否错过了某种元数据?