一、
这种方式压缩后的图片,转 Data 的话会发现data的体积比之前的还大
/// 等比缩放图片 (注:压缩后的image转成data去使用的时候又把图片变大了)
/// - Parameter scale: 缩放比例
func scaleZoomImage(scale: CGFloat) -> UIImage?{
let reSize = CGSize(width: self.size.width * scale, height: self.size.height * scale)
return resetImgSize(size: reSize)
}
/// 重置图片大小 (注:压缩后的image转成data去使用的时候又把图片变大了)
/// - Parameter size: 图片大小
func resetImgSize(size: CGSize) -> UIImage?{
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)
self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let resultImg = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImg
}
二、
当图片文件需要使用 Data 上传的时候,建议用这种
/// 直接使用data进行压缩
/// - Parameter toKb: 指定data最大的体积
/// - Returns: data
func compressOriginalImage(_ toKb: Int = 10485760) -> Data?{
var compression: CGFloat = 1
let minCompression: CGFloat = 0.1
var imageData = self.jpegData(compressionQuality: compression)
if imageData!.count < toKb {
return imageData
}
while imageData!.count > toKb, compression > minCompression {
compression -= 0.1
imageData = self.jpegData(compressionQuality: compression)
}
if imageData!.count > toKb {
return nil
}
return imageData
}