2016-03-28 111 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 
     } 
    } 
}