【问题标题】:how to resize UIImage with SDWebImage?如何使用 SDWebImage 调整 UIImage 的大小?
【发布时间】:2019-01-20 21:11:30
【问题描述】:

我想用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 方法?

【问题讨论】:

  • 从 sd-webimage 下载图片后要调整大小吗?
  • 是的,我想在下载后调整图片大小。

标签: ios swift swift3 swift4 sdwebimage


【解决方案1】:

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!
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多