从 NSData 获取较低质量的 UIImage?

Posted

技术标签:

【中文标题】从 NSData 获取较低质量的 UIImage?【英文标题】:Get lower quality UIImage from NSData? 【发布时间】:2012-10-02 23:03:50 【问题描述】:

我有一个使用 JPEG 压缩压缩成 NSData 的图像。我使用[UIImage imageWithContentsOfFile:] 访问它。但是,对于较大的图像,这需要几秒钟。是否有更快的方法从文件系统加载图像,可能与从包中加载图像的速度相同?如果没有,有没有办法在加载完整质量版本时临时加载较低质量版本的图像,而不是保存较低质量版本?

【问题讨论】:

【参考方案1】:

虽然您可以使用 JPEG 2000 构建类似的东西(您需要构建自己的 jpeg 库副本为discussed here,然后手写阅读代码),但我不认为您将在那里获得良好的投资回报。从磁盘读取数据的成本仍然可能压倒一切。

首先,如果您正在从包中读取数据,请尽可能使用 PNG。 ios 对存储在包中的 PNG 进行了高度优化(复制过程的一部分是以 iOS 特定的优化格式重写它们)。

无论您做什么,如果您想要一个占位符,您可能需要以某种方式自己提供它,或者作为单独的文件,或者作为您自己阅读和管理的自定义文件格式。这不会是一个非常难以设计的格式,但您仍然需要事先在某个地方进行所有调整大小。

主要的关键是读取一个大的图像文件是昂贵的,你不应该在主线程上这样做。您需要在后台队列(GCD 或操作)上执行此操作,并在数据可用时更新 UI。解决这个事实没有真正简单的方法。

【讨论】:

【参考方案2】:

低质量是比其他文件更小的文件...这是检查应用程序文件夹中文件的代码。

NSFileManager *manager = [NSFileManager defaultManager]; 
if ([manager fileExistsAtPath:path])  
    NSDictionary *attributes = [manager attributesOfItemAtPath:path error:nil]; 
    unsigned long long size = [attributes fileSize]; 
    resultlbl.text = [NSString StringWithFormat:@"%d",size];
 

【讨论】:

以上是关于从 NSData 获取较低质量的 UIImage?的主要内容,如果未能解决你的问题,请参考以下文章

直接从 AFNetworking 获取 NSData,而不是让它转换为 UIImage

C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片

AFNetworking 可以轻松返回 UIImage,但我如何返回 NSData?

Swift 核心数据 FetchRequest NSData 到 UIIMage

从 NSData 转换到 UIImage 很慢,阻塞 UITableView

将UIImage转换为NSData并返回UIImage