从文件加载的 UIImage 部分是黑色的

Posted

技术标签:

【中文标题】从文件加载的 UIImage 部分是黑色的【英文标题】:UIImage loaded from file is partly black 【发布时间】:2015-04-28 20:16:31 【问题描述】:

我正在开发一个必须保存和加载可变数量的 UIImages 的应用程序。目前我正在用 126 张图片对其进行测试。

我使用 for 循环将每个 UIImage 的数据写入文件,并使用另一个 for 循环再次加载图像。 我使用以下代码将 UIImages 保存到文件中:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *component = [NSString stringWithFormat:@"ImageFile%i.png",[sing.externComponentCounter intValue]];
sing.externComponentCounter = [NSNumber numberWithInt:[sing.externComponentCounter intValue]+1];
NSString *path = [documentsDirectory stringByAppendingPathComponent:component];
self.sideOneImagePath = component;
NSData *imageOneData = UIImagePNGRepresentation(self.sideOneImage);
[imageOneData writeToFile:path atomically:YES];

externalCounter 是我的单例对象的 NSNumber 属性。

为了加载我使用的 UIImages:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:self.sideOneImagePath];
self.sideOneImage = [UIImage imageWithContentsOfFile:path];

此代码通常运行良好,但 UIImage 有时底部有黑条或黑线。 例如https://www.dropbox.com/s/8qt2x45sqqnkwzy/image1.JPG?dl=0

请注意,图片底部的黑条不应存在,因为它现在无法阅读图片上的整个文本。 到目前为止,我无法识别这种情况发生的模式,它似乎只是随机发生的。它永远不会发生在一张图片上,但总是发生在所有这 126 个 UIImage 上。要么它工作得非常好,要么所有图片都有一个大小不同的黑条。

我正在使用最新 ios 版本的 iPhone 6 上测试该应用程序,并且我正在使用最新的 Xcode 版本。

很遗憾,我完全不知道是什么导致了我的问题,而且我在互联网上也没有发现任何类似的问题。

提前感谢您,任何帮助将不胜感激!

【问题讨论】:

你写出来的时候好像没有完整的图像……原始图像来自哪里? 我倾向于认为 Dylan 的评估是正确的。似乎图像加载过程中的某些东西导致了问题。如果您同时加载图像,请尝试更改为顺序以进行故障排除。我敢打赌,如果您这样做,如果出现任何问题,那将只是一张图片。无论如何,我曾经在拨号调制解调器时代看到这样的图像,当时在传输图像的过程中连接中断。 如果您有损坏或部分数据会发生这种情况,您需要确保整个图像已下载且没有错误。 图片最初来自 iPhone 照片库,使用 UIImagePickerView。 【参考方案1】:

尽管已经两年多了,但我正在为别人回答我自己的问题。

问题是我同时将所有文件写入磁盘。显然这太过分了。

我只是更改了应用程序逻辑,以确保图像在用户添加后立即保存,而不是最终保存。

【讨论】:

以上是关于从文件加载的 UIImage 部分是黑色的的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中

将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?

从 CMSampleBuffer 转换为 UIImage 对象

如何以编程方式将图像裁剪成碎片

将 UIImage 保存为不同的名称

清除部分 UIImage