swift sdwebiamge圆角裁切封装 exension

2021-02-17  本文已影响0人  叫我周杰伦

// MARK:sdwebimage圆角裁切封装

extension UIImageView{

    funcsd_setImageWithURL(urlStr:NSString,cornerRadius:CGFloat){

        if(urlStr.length<=0) {return}



        leturl =NSURL.init(string: urlStrasString)

                ifcornerRadius!=0.0{

                    // 有圆角,读取圆角的缓存图片

                    let  cacheurlStr = urlStr.appending("radius=%.1f\(cornerRadius)")



                    letcacheImage =SDImageCache.shared().imageFromDiskCache(forKey: cacheurlStr)

                    ifcacheImage  !=nil{

                        self.image= cacheImage;

                    }else{

                        SDWebImageManager.shared().loadImage(with: urlasURL?, options:SDWebImageOptions.retryFailed) { (receivedSize, expectedSize, targetURL)in



                        } completed: { (image, data, error, cacheType, finished, imageURL)in

                            iffinished==true{

                                image?.imageWithCornerRadius(cornerRadius: cornerRadius, callBack: { (radiusImage)in

                                    self.image= radiusImage;

                                    SDImageCache.shared().store(radiusImage, forKey: cacheurlStr, completion:nil)

                                })

                            }

                        }

                    }

                }

                else{



                    self.sd_setImage(with: urlasURL?, placeholderImage:nil, options:SDWebImageOptions.retryFailed) { (image, error, cacheType, imageURL)in

                    }

                }

    }

}

// MARK: 圆角裁切

extension UIImage{

    // MARK:裁切为圆形

    ///裁切为圆形 图片本身应为正方形

    funccirclemage(callBack:@escaping(_image:UIImage) ->()) {



            self.imageWithCornerRadius(cornerRadius:self.size.width*0.5) { (image)in

                callBack(image)

            }

       }



    // MARK:分线程裁切圆角

    ///分线程裁切圆角

  func  imageWithCornerRadius(cornerRadius:CGFloat,callBack:@escaping(_image:UIImage) ->())    {

        ifcornerRadius<=0{

            return

        }

        DispatchQueue.global().async{

            // 开始裁切圆角

            letbounds =CGRect(x:0, y:0, width:self.size.width, height:self.size.height);

            UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale);

               letcontext =UIGraphicsGetCurrentContext();

            letpath =UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)



            context?.addPath(path.cgPath)

            context?.clip()

            self.draw(in: bounds)

               let image = UIGraphicsGetImageFromCurrentImageContext()

               UIGraphicsEndImageContext()



            //回到主线程刷新UI

            DispatchQueue.main.async(execute: {

                callBack(image ??UIImage())

            })

        }



    }



    // MARK:主线程裁切圆角

    ///主线程裁切圆角

    func  imageWithCornerRadius(cornerRadius:CGFloat) ->UIImage{

        ifcornerRadius<=0{returnself}



        letoriginImage =self;

        // 开始裁切圆角

        letbounds =CGRect(x:0, y:0, width:self.size.width, height:self.size.height);

        UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale);

           let context = UIGraphicsGetCurrentContext();

        letpath =UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)



        context?.addPath(path.cgPath)

        context?.clip()

        originImage.draw(in: bounds)

           let image = UIGraphicsGetImageFromCurrentImageContext()

           UIGraphicsEndImageContext()

        returnimage!

    }



    func originalRenderImage() -> UIImage {

        self.withRenderingMode(.alwaysOriginal)

        return self

    }



}

上一篇下一篇

猜你喜欢

热点阅读