当我通过 UIImageView 显示大图像时应用程序崩溃

App crashed when I display a large image by UIImageView

我通过SDWebImage从网络上设置了一张10000 * 10000像素的图片到UIImageView,由于分配了太多内存导致App崩溃。我试图调整已由 SDWebImage 加载的图像的大小,因此我添加了以下代码:

UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, CGRectMake(0, 0, size.width, size.height));
CGContextSetInterpolationQuality(context, 0.8);
[self drawInRect:drawRect blendMode:kCGBlendModeNormal alpha:1];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

虽然图像尺寸变小了,但我的应用程序还是因为同样的原因崩溃了。 调整大小的时候好像有一些渲染动作,内存升到600M,一会儿就降到87M

如何在不渲染的情况下调整图片大小?

看来用UIWebView显示图片不存在这个问题。它是如何工作的?

任何帮助和建议将不胜感激。


解析度: https://developer.apple.com/library/ios/samplecode/LargeImageDownsizing/


该分辨率适用于 jpg 但不适用于 png

您无法将图像解压缩到内存中,因为它太大了。这就是图像平铺的用途,因此您可以根据当前查看的部分(缩放位置和比例)为图像下载一组平铺。

即如果您正在查看整个图像,您会得到 1 个缩小的图块,因此质量低且尺寸小。当您放大时,您会得到其他显示较少图像的小尺寸图像 'area'。

网络视图很可能使用图像格式下载相对较小的图像大小,即整个图像的缩小版本,因此不需要将整个图像解压缩到内存中。它可以这样做是因为它知道您的图像是 10,000x10,000,但它将以 300x300(例如)显示在页面上。

您是否尝试使用:UIImageJPEGRepresentation (or UIImagePNGRepresentation)

您可以使用它缩小图片尺寸。