Swift 图片压缩 - lidaoyuan/Notes GitHub Wiki

/// 压缩尺寸
func resizeImage(originalImg: UIImage) -> UIImage {
        

        let width = originalImg.size.width
        let height = originalImg.size.height
        let scale = width / height
        
        var sizeChange = CGSize()
        
        if width <= 1280 && height <= 1280{ //图片宽或者高均小于或等于1280时图片尺寸保持不变,不改变图片大小
            return originalImg
        } else if width > 1280 || height > 1280 {//宽或者高大于1280,但是图片宽度高度比小于或等于2,则将图片宽或者高取大的等比压缩至1280
            
            if scale <= 2 && scale >= 1 {
                let changedWidth: CGFloat = 1280
                let changedheight: CGFloat = changedWidth / scale
                sizeChange = CGSize(width: changedWidth, height: changedheight)
                
            } else if scale >= 0.5 && scale <= 1 {
                
                let changedheight: CGFloat = 1280
                let changedWidth: CGFloat = changedheight * scale
                sizeChange = CGSize(width: changedWidth, height: changedheight)
                
            } else if width > 1280 && height > 1280 {//宽以及高均大于1280,但是图片宽高比大于2时,则宽或者高取小的等比压缩至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 {// 宽或者高,只有一个大于1280,并且宽高比超过2,不改变图片大小
                return originalImg
            }
        }
        
        UIGraphicsBeginImageContext(sizeChange)
        
        originalImg.draw(in: CGRect(x: 0, y: 0, width: sizeChange.width, height: sizeChange.height))
   
        let resizedImg = UIGraphicsGetImageFromCurrentImageContext()!
        
        UIGraphicsEndImageContext()
        
        return resizedImg
        
    }
    /// 压缩质量
    func compressImageSize(image: UIImage) -> Data {
        
        var zipImageData = image.jpegData(compressionQuality: 0.1)!
        let originalImgSize = zipImageData.count / 1024 as Int  //获取图片大小
        print("原始大小: \(originalImgSize)")
        
        if originalImgSize > 1500 {
            
            zipImageData = image.jpegData(compressionQuality: 0.2)!
            
        } else if originalImgSize > 600 {
            
            zipImageData = image.jpegData(compressionQuality: 0.4)!
        } else if originalImgSize > 400 {
            
            zipImageData = image.jpegData(compressionQuality: 0.6)!
            
        } else if originalImgSize > 300 {
            
            zipImageData = image.jpegData(compressionQuality: 0.7)!
        } else if originalImgSize > 200 {
            
            zipImageData = image.jpegData(compressionQuality: 0.8)!
        }
        
        return zipImageData
    }