如何使用SDWebImage调整UIImage的大小?

9

我想使用 SDWebImage 来调整图片大小。

我尝试使用 SDWebImageManagerDelegateimageManager delegate 方法。

但是,我不知道如何调用 imageManager 方法。

以下是我的代码:

import UIKit
import SDWebImage

class testGraphic2ViewController: UIViewController, SDWebImageManagerDelegate {
    @IBOutlet weak var imageView: UIImageView!

    let postImageUrlStr = "https://firebasestorage.googleapis.com/v0/b/instagramclone-be6eb.appspot.com/o/posts%2FFBAE2BE9-F429-4D39-978C-DD2E24BF062D?alt=media&token=7b41569b-5451-4728-942c-6d43ec50350c"

    override func viewDidLoad() {
        super.viewDidLoad()
        SDWebImageManager.shared().delegate = self
        SDWebImageManager.shared().loadImage(with: URL(string: postImageUrlStr), options: [], progress: nil) { (image, data, error, cacheType, finished, url) in
            self.imageView.image = image
        }
    }

    func imageManager(_ imageManager: SDWebImageManager, transformDownloadedImage image: UIImage?, with imageURL: URL?) -> UIImage? {
        print("imageManager is called!")
        guard let image = image, let imageURL = imageURL else {
            return nil
        }
        if (imageURL.lastPathComponent == "large" && (image.size.width > 1000 || image.size.width > 1000)) {
            let targetSize = CGSize(width: 1000, height: 1000)
            UIGraphicsBeginImageContextWithOptions(targetSize, false, image.scale)
            image.draw(in: CGRect(origin: .zero, size: targetSize))

            let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return scaledImage
        } else {
            return image
        }
    }

如何调用imageManager方法?

你想在从SDWebImage下载图像后调整其大小吗? - Samarth Kejriwal
是的,我想要在下载后调整图像大小。 - kou
2个回答

25
在SDWebImage 5.x中,使用内置的SDImageResizingTransformer相当简单。SDWebImage 5.x SDImageResizingTransformer
let transformer = SDImageResizingTransformer(size: CGSize(300, 300), scaleMode: .fill)
let imageView: UIImageView
imageView.sd_setImage(withURL: url, placeholderImage: nil, context: [.imageTransformer: transformer])

2

由于SDWebImage下载后会返回UIImage,因此我们可以创建UIImage的扩展并使用该扩展来调整图像大小。

Swift3

extension UIImage{

func resizeImageWith(newSize: CGSize) -> UIImage {

    let horizontalRatio = newSize.width / size.width
    let verticalRatio = newSize.height / size.height

    let ratio = max(horizontalRatio, verticalRatio)
    let newSize = CGSize(width: size.width * ratio, height: size.height * ratio)
    UIGraphicsBeginImageContextWithOptions(newSize, true, 0)
    draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接