使用 AlamofireImage 调整下载图像的大小

Resize Download Image with AlamofireImage

我在 UICollectionViewCell 上有 200px x 200px UIImageView 将显示来自 URL 的图像。问题是我不知道 URL 提供的图像分辨率是多少,我认为由于内存消耗,最好在放入 UIImageView 之前先调整它的大小。

我已经使用 alamofire 下载图像

let url = NSURL(string: "http:\(product.picUrl)")
self.imgProductItem.af_setImageWithURL(url!, placeholderImage: UIImage(named: "app_default-resize"))

我想知道有没有什么方法可以先调整它的大小,然后再放入 UIImageView?如果有任何有关下载图像以节省内存使用量的提示,我想听听。

如有任何帮助,我们将不胜感激。谢谢。

func ResizeImage(image: UIImage, targetSize: CGSize) -> UIImage {

    let rect = CGRectMake(0, 0, targetSize.width, targetSize.height)

    UIGraphicsBeginImageContextWithOptions(targetSize, false, 1.0)
    image.drawInRect(rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
}

您可以使用过滤器:

let url = URL(string: ...)!
let placeholder = UIImage(named: "app_default-resize")
let filter = AspectScaledToFillSizeFilter(size: imageView.frame.size)
imageView.af.setImage(withURL: url, placeholderImage: placeholder, filter: filter)

参见https://github.com/Alamofire/AlamofireImage#image-filters-1

对于 Swift 2 版本,请参阅 previous revision of this answer

swift 5 次更新

func ResizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: targetSize.width, height: targetSize.height)
    UIGraphicsBeginImageContextWithOptions(targetSize, false, 1.0)
    image.draw(in: rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
}