<error>:UIImagePNGRepresentation中的ImageIO:CGImageReadGetBytesAtOffset </error>

时间:2015-03-01 08:41:38

标签: ios uiimage uiimagepngrepresentation

我在此错误中找到的唯一其他信息是here,这对我们没有帮助。

当我尝试保存图像时出现以下错误。这似乎只有在我同时拥有多个图像(~6)时才会发生。它何时发生似乎也是完全随机的。有时一切都很好,有时它会在1张图片上失败,有时会失败3,有时候应用会在EXC_BAD_ACCESS错误中完全崩溃。

错误:ImageIO:CGImageReadGetBytesAtOffset:^^^ ERROR ^^^ CGImageSource创建时的数据大小:1144891 - 当前大小仅为:1003855

以下是保存图片的代码:

- (void)saveWithImage:(UIImage *)anImage andFileName:(NSString *)aFileName {
    NSString *subDirectory = @"Images";
    NSString *fileName = [aFileName stringByAppendingString:@".png"];

    NSString *documentsPath = [[CMAStorageManager sharedManager] documentsSubDirectory:subDirectory].path;
    NSString *imagePath = [subDirectory stringByAppendingPathComponent:fileName];
    __block NSString *path = [documentsPath stringByAppendingPathComponent:fileName];
    __block NSData *data = UIImagePNGRepresentation(anImage);

    self.image = anImage;
    self.tableCellImage = anImage;
    self.galleryCellImage = anImage;
    self.imagePath = imagePath; // stored path has to be relative, not absolute (iOS8 changes UUID every run)

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        if (![data writeToFile:path atomically:YES])
            NSLog(@"Error saving image to path: %@", path);

        dispatch_async(dispatch_get_main_queue(), ^{

        });
    });
}

我收到了这个错误,因此我的图片没有保存(或只保存了一半),这完全搞砸了UI显示,以及任何后续的应用程序启动。我已将其缩小到UIImagePNGRepresentation来电。

在相关的说明中,该代码会锁定UI;我认为是因为UIImagePNGRepresentation电话;但是,据我所知UIImagePNGRepresentation没有线程安全,所以我无法在后台执行此操作。有没有人知道解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我收到此错误是因为我调用的api在tmp&gt;&gt;中抛出500并返回html错误页面NSData文件我试图转换为PNG。

您可能希望在转换前检查您尝试打开的文件是否为图像。

如果您使用dowloadTask下载文件,则在移动tmp&gt;之前检查statusCode是否为200。 /Document/.png

heres my answer in other SO