2016-03-28 110 views
1

你好,我正在使用sdwebImage在我的應用程序上顯示圖像。我有一個代碼在這裏調整圖像大小resize sdwebImage swift

func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage { 

    let scale = newWidth/image.size.width 
    let newHeight = image.size.height * scale 
    UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)) 
    image.drawInRect(CGRectMake(0, 0, newWidth, newHeight)) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

的問題是上述函數接受的UIImage作爲參數和sdwebimage接受URL。我如何在sdwebimage中調用上述的resize函數。或短我怎麼能調整是通過sdwebImage呈現在這裏

cell.profileImageView.sd_setImageWithURL(UIImage().absoluteURL(profileImageUrl as! String), placeholderImage: UIImage.init(named: "default-profile-icon")?.circle!, completed: completionBlock) 
+0

sdwebimage接受網址,但你應用在那個imageview在我的知識是沒有問題 –

+0

抱歉,這是什麼意思。我很抱歉,我沒有得到你 – hellosheikh

+0

在我的知識中你的代碼是正確的,一個疑問你叫'resizeImage'方法 –

回答

3

像我不跟熟悉並且迅速,試試這個

cell.profileImageView.sd_setImageWithURL(
    NSURL(string: profileImageUrl as! String), 
    placeholderImage: UIImage.init(named: "default-profile-icon"), 
    options: nil, 
    progress: nil, 
    completed: { (image: UIImage?, error: NSError?, cacheType: SDImageCacheType!, imageURL: NSURL?) in 

     guard let image = image else { return } 
     print("Image arrived!") 
     cell.profileImageView.image = resizeImage(image, newWidth: 200) 
    } 
) 
+0

裏面的塊調用調整大小的方法 –

+0

你的問題已解決或沒有,如果我的回答是沒有用的回覆一次我刪除我的回答 –

1

SDWebImage支持圖片直接通過其SDWebImageManagerDelegate協議處理。您可以使用imageManager:transformDownloadedImage:withURL:方法來轉換下載的圖像。

您可以設置圖像管理委託是這樣的:

SDWebImageManager.sharedManager.delegate = self; 
+0

你能寫出完整的代碼或編輯我的代碼。 – hellosheikh

0

使用共享SDWebImageManager是不是好主意。有些進程可以在這個時候下載圖片。

我的swift 3自定義SDWebImageManager類和自定義SDWebImageManagerDelegate調整器的示例。

import SDWebImage 

class ImageResizer: NSObject, SDWebImageManagerDelegate { 
    private func resizeImage(_ image: UIImage, newHeight: CGFloat) -> UIImage { 
     let scale = newHeight/image.size.height 
     let newWidth = image.size.width * scale 

     UIGraphicsBeginImageContextWithOptions(CGSize(width: newWidth, height: newHeight), false, 0) 
     image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return newImage! 
    } 

    public func imageManager(_ imageManager: SDWebImageManager, transformDownloadedImage image: UIImage?, with imageURL: URL?) -> UIImage? { 
     guard let _image = image else { 
      return nil 
     } 

     return resizeImage(_image, newHeight: 20) 
    } 
} 


class BasicTrainView: XibView { 
    static let imageManager: SDWebImageManager = SDWebImageManager() 
    static let imageResizer = ImageResizer() 

    func xxx() { 
     BasicTrainView.imageManager.delegate = BasicTrainView.imageResizer 
     BasicTrainView.imageManager.loadImage(with: logoURL, options: [], progress: nil) { (image, _, error, sdImageCacheType, _, url) -> Void in 
      guard let _image = image else { 
       self.carrierLogoImageView.image = nil 
       return 
      } 

      self.carrierLogoImageView.image = _image 
     } 
    } 
}