10

我的 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 转换为数据、重新加载它并在向用户显示后再次尝试转换它,我是否错过了某种元数据?

4

1 回答 1

34

我以前遇到过类似的事情。imageWithContentsOfFile只要UIImage用于创建的文件还活着,它看起来就一直保持打开状态。当时,我通过将文件读入 aNSData然后直接从文件创建UIImageNSData不是文件来解决这个问题。

于 2012-05-21T13:14:21.170 回答