2016-03-28 2 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. или короче, как я могу изменить размер изображения, которые, представляя через sdwebImage здесь

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

sdwebimage принять URL, но вы применили в этом ImageView в моих знаниях не существует никаких проблем –

+0

жаль, что это значит. Мне жаль, что я не получил вас – hellosheikh

+0

, насколько мне известно, в вашем коде верен, один сомневаюсь, что вы вызвали метод resizeImage –

ответ

3

Я не familier с быстрым, попробуйте этот

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 не является хорошей идеей. В это время некоторые процессы могут загружать изображения.

Мой быстрый 3 пример с пользовательским SDWebImageManager в классе и пользовательский SDWebImageManagerDelegate resizer.

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 
     } 
    } 
} 
Смежные вопросы