从NSData获得质量较低的UIImage?

时间:2012-10-02 23:03:51

标签: iphone objective-c ios uiimage nsdata

我使用JPEG压缩将图像压缩到NSData中。我使用[UIImage imageWithContentsOfFile:]访问它。但是,如果图像较大,则需要几秒钟。是否有更快的方式从文件系统加载图像,可能与从捆绑中加载图像的速度相同?如果没有,除了保存质量较低的版本之外,有没有办法在加载全质量版本时暂时加载较低质量版本的图像?

2 个答案:

答案 0 :(得分:3)

虽然您可以使用JPEG 2000构建类似的东西(您需要构建自己的jpeg库副本为discussed here,然后手写阅读代码),我不知道我认为你会在那里获得良好的投资回报。从磁盘读取数据的成本仍可能超过其他所有成本。

首先,如果您正在阅读捆绑包,请尽可能使用PNG。 iOS高度优化了存储在bundle中的PNG(复制过程的一部分是以iOS特定的优化格式重写它们)。

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

主要关键是读取大图像文件很昂贵,不应该在主线程上进行。您需要在后台队列(GCD或操作)上执行此操作,并在数据可用时更新UI。围绕这个事实并没有什么好办法。

答案 1 :(得分:-1)

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

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];
}