从UIImageJPEGRepresentation()获取的iPhone iOS保存数据第二次失败:ImageIO:CGImageRead_mapData'open'失败

时间:2012-05-21 12:28:28

标签: iphone objective-c ios uiimage javax.imageio

我的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 个答案:

答案 0 :(得分:32)

我之前遇到过类似的事情。只要imageWithContentsOfFile用于创建文件仍处于活动状态,UIImage看起来就会保持文件处于打开状态。当时,我通过将文件读入NSData,然后直接从UIImage而不是文件创建NSData来解决问题。