iOS内存激增CollectionView [高分辨率]图像

时间:2018-08-10 12:21:55

标签: ios sdwebimage alamofireimage kingfisher

我有一个CollectionView,其中的单元格具有UIImageView。列表中的某些图像确实具有3000 x 2000以上的高分辨率。我正在使用AlamofireImage Library来显示和缓存图像,但是它仍然有很大的峰值。我尝试做

let filter = AspectScaledToFillSizeFilter(size: imageView.frame.size)
imageView.af_setImage(withURL: url, filter: filter)

这没有太大变化。

下载图像时是否有更好的方法来调整分辨率/降级分辨率,但在显示图像之前,iOS内存峰值更多是因为分辨率,而不是图像文件的大小。

1 个答案:

答案 0 :(得分:0)

Swift 4.1

这是我调整图像尺寸的方法。您可以在显示之前对其进行处理。

// Resize to ~1.5Kx2K resoultion and compress to <200KB (JPEG 0.2)
private func resizePhoto(_ originalPhoto: UIImage) -> UIImage? {
    var size: CGSize
    let scale = UIScreen.main.scale
    if originalPhoto.size.width > originalPhoto.size.height { // Landscape
        size = CGSize(width: 2016/scale, height: 1512/scale)
    } else { // Portrait
        size = CGSize(width: 1512/scale, height: 2016/scale)
    }
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    originalPhoto.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    let resizedPhoto = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let scaledPhotoData = UIImageJPEGRepresentation(resizedPhoto!, 0.2)
    //print(">>> Resized data size: \(scaledPhotoData!.count)")
    return UIImage(data: scaledPhotoData)
}