swift图片压缩

二话不说,上代码

 extension UIImage{
  func xc_resizeImage() -> UIImage{
    let width:CGFloat = self.size.width
    let height:CGFloat = self.size.height
    let scale:CGFloat = width/height
    var sizeChange:CGSize = CGSize()
    if width <= 1280 && height <= 1280{
    //图片宽或者高均小于或等于1280时图片尺寸保持不变,不改变图片大小
        return self
    }else if width > 1280 || height > 1280 {
        if scale <= 2 && scale >= 1 {
            //比例为1和2之间,宽比高长
            let changedWidth:CGFloat = 1280
            let changedheight:CGFloat = changedWidth / scale
            sizeChange = CGSize(width: changedWidth, height: changedheight)
        }else if scale >= 0.5 && scale <= 1 {
             //比例为0.5和1之间,高比宽长
            let changedheight:CGFloat = 1280
            let changedWidth:CGFloat = changedheight * scale
            sizeChange = CGSize(width: changedWidth, height: changedheight)
        }else if width > 1280 && height > 1280 {
            //宽高都大于1280
            if scale > 2 {
                //高的值比较小
                let changedheight:CGFloat = 1280
                let changedWidth:CGFloat = changedheight * scale
                sizeChange = CGSize(width: changedWidth, height: changedheight)
            }else if scale < 0.5{
                //宽的值比较小
                let changedWidth:CGFloat = 1280
                let changedheight:CGFloat = changedWidth / scale
                sizeChange = CGSize(width: changedWidth, height: changedheight)
            }
        }else {
            //d, 宽或者高,只有一个大于1280,并且宽高比超过2
            if self.size.width>self.size.height{
                //宽比高长,选择高压缩,640可以自己调整(超长图的宽高尽量小点,避免尺寸太大,比如说12400*1280)
                if self.size.height>640{
                    let changedheight:CGFloat = 640
                    let changedWidth:CGFloat = changedheight * scale
                    sizeChange = CGSize(width: changedWidth, height: changedheight)
                }else{
                    return self
                }
            }else{
                //高比宽长,选择宽压缩
                if self.size.width>640{
                    let changedWidth:CGFloat = 640
                    let changedheight:CGFloat = changedWidth / scale
                    sizeChange = CGSize(width: changedWidth, height: changedheight)
                }else{
                    return self
                }
            }
        }
    }
    //下面流程化操作
    UIGraphicsBeginImageContext(sizeChange)
    self.draw(in: CGRect(x: 0, y: 0, width: sizeChange.width, height: sizeChange.height))
    guard let resizedImg = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage() }
    UIGraphicsEndImageContext()
    return resizedImg
  }
}

具体用法

let tempImage:UIImage = image.xc_resizeImage()
if let imgData:Data = tempImage.jpegData(compressionQuality: 1) {
   //上传图片等操作
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于项目中有大量的上传图片,之前图片的处理方式直接就用了UIImageJPEGRepresentation方式来处...
    星星点灯0_0阅读 9,900评论 1 9
  • 一、 这种方式压缩后的图片,转 Data 的话会发现data的体积比之前的还大 二、 当图片文件需要使用 Data...
    懒床小番茄阅读 3,564评论 3 1
  • 刚刚接触swift,对于图片压缩还是借鉴了一下,别的前辈的经验,这一段基本借鉴了,没有进行整理,主要是对图片的尺寸...
    舟_e9ce阅读 1,386评论 1 3
  • 微信分享、微博分享等等,对图片大小有要求,所以需要压缩,把该方法放到Extension+UIImage即可
    AirZilong阅读 2,843评论 0 5
  • 关于图片的压缩或者增大,我们在网上可以搜到很多的例子.在这里,我来展示一个逼格高一点的,性能给力的!二话不说,先上...
    走在寒夜的冷风中阅读 1,678评论 4 20