swift 图片压缩

来源:互联网 发布:平原烈火读后感知乎 编辑:程序博客网 时间:2024/06/05 11:26

微信分享、微博分享等等,对图片大小有要求,所以需要压缩,把该方法放到Extension+UIImage即可!

// 图片压缩    func compressImage(maxLength: Int) -> UIImage {        let tempMaxLength: Int = maxLength / 8        var compression: CGFloat = 1        guard var data = UIImageJPEGRepresentation(self, compression) where data.length > tempMaxLength else { return self }                // Compress by size        var max: CGFloat = 1        var min: CGFloat = 0        for _ in 0..<6 {            compression = (max + min) / 2            data = UIImageJPEGRepresentation(self, compression)!            if CGFloat(data.length) < CGFloat(tempMaxLength) * 0.9 {                min = compression            } else if data.length > tempMaxLength {                max = compression            } else {                break            }        }        var resultImage: UIImage = UIImage(data: data)!        if data.length < tempMaxLength { return resultImage }                // Compress by size        var lastDataLength: Int = 0        while data.length > tempMaxLength && data.length != lastDataLength {            lastDataLength = data.length            let ratio: CGFloat = CGFloat(tempMaxLength) / CGFloat(data.length)            print("Ratio =", ratio)            let size: CGSize = CGSize(width: Int(resultImage.size.width * sqrt(ratio)),                                      height: Int(resultImage.size.height * sqrt(ratio)))            UIGraphicsBeginImageContext(size)            resultImage.drawInRect(CGRect(x: 0, y: 0, width: size.width, height: size.height))            resultImage = UIGraphicsGetImageFromCurrentImageContext()!            UIGraphicsEndImageContext()            data = UIImageJPEGRepresentation(resultImage, compression)!        }        return resultImage    }

如果转载请注明转于:AirZilong的博客

1 0