使用SDWebImage处理非常大的图像下载

时间:2014-06-12 05:42:59

标签: ios iphone uiimageview sdwebimage

我使用SDWebImage以异步方式将图像下载到UIImageView。收到的大多数图片都是可接受的尺寸,可以轻松下载,并设置为UIImageView

但有时候,URL上的源图像的分辨率非常高(相对于我的imageView - 60x60的大小)。在这种情况下,永远不会设置图像。有时我的应用程序崩溃,有时没有任何反应(图像保持nil),并且在极少数情况下我收到类似的错误:Unable to allocate 400000 bytes of memory(我不完全确定确切的错误日志,我道歉)。

例如,来自Pinterest网站本身的pinterest图标的this图像是巨大的(10000 x 10000)。我的imageView无法绘制此图片。目前,我已用硬编码用this替换图像,但我知道这是不好的做法。此外,这只是一种情况,可能存在无限多的图像,这可能会影响用户体验。

我该如何处理此类案件?

3 个答案:

答案 0 :(得分:2)

只需检查您收到的图片大小,当尺寸远大于您的图片视图可接受的尺寸时,您可以调整图片大小,此处链接可调整图片大小link。调整大小后,您可以将其放在imageview中。希望对你有所帮助。

答案 1 :(得分:0)

我建议您使用此AsyncImageView。我已经使用过它,它可以创造奇迹。要调用此API:

ASyncImage *img_EventImag = alloc with frame;
NSURL *url = yourPhotoPath;
[img_EventImage loadImageFromURL:photoPath];
[self.view addSubView:img_EventImage];

与使用UIImageView相同。简单,它可以为您完成大部分工作。 AsyncImageView包含UIImageView上的一个简单类别,用于在iOS上异步加载和显示图像,以便它们不会锁定UI,以及用于更高级功能的UIImageView子类。 AsyncImageView适用于URL,因此可以与本地或远程文件一起使用。

加载/下载的图像缓存在内存中,并在发生内存警告时自动清除。 AsyncImageView独立于UIImage缓存运行,但默认情况下,位于应用程序包根目录中的任何图像都将存储在UIImage缓存中,从而避免重复缓存图像。

该库还可以独立于UIImageView加载和缓存图像,因为它提供了对底层加载和缓存类的直接访问。

答案 2 :(得分:0)

SDWebImage是开源库。将源添加到项目中并在SDWebImageDownloader.m

中附加大小检查