我有一个CollectionView,其中的单元格具有UIImageView。列表中的某些图像确实具有3000 x 2000以上的高分辨率。我正在使用AlamofireImage Library来显示和缓存图像,但是它仍然有很大的峰值。我尝试做
let filter = AspectScaledToFillSizeFilter(size: imageView.frame.size)
imageView.af_setImage(withURL: url, filter: filter)
这没有太大变化。
下载图像时是否有更好的方法来调整分辨率/降级分辨率,但在显示图像之前,iOS内存峰值更多是因为分辨率,而不是图像文件的大小。
答案 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)
}