关于这个错误,我能找到的唯一其他信息是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并不是线程安全的,所以我不能在后台执行。有谁知道怎么绕过这件事吗?
谢谢!
发布于 2015-03-01 23:45:39
如果有人遇到类似的问题,这就是我的解决办法。
这是我用来在后台线程中保存UIImages的解决方案:
Convert UIImage to NSData without using UIImagePngrepresentation or UIImageJpegRepresentation
发布于 2016-12-06 15:53:28
我得到这个错误是因为我调用的api在我试图转换为PNG的tmp >> NSData文件中抛出了一个500并返回html错误页。
您可能希望在转换之前检查您试图打开的文件是图像。
如果您正在用dowloadTask下载文件,那么在移动tmp >/Document/..png之前,先检查statusCode是200
https://stackoverflow.com/questions/28791625
复制相似问题