wenweiwei 3 роки тому
батько
коміт
508abefb90
1 змінених файлів з 65 додано та 0 видалено
  1. 65 0
      BFCommonKit/Classes/BFUtility/PQCommonMethodUtil.swift

+ 65 - 0
BFCommonKit/Classes/BFUtility/PQCommonMethodUtil.swift

@@ -839,6 +839,71 @@ public func zipImage(image: UIImage?, size: Int) -> Data? {
     return data
 }
 
+/// 压缩图片到指定大小
+/// - Parameters:
+///   - image: <#image description#>
+///   - maxLength: <#maxLength description#>
+///   - cyles: <#cyles description#>
+/// - Returns: <#description#>
+public func zipImageQuality(image: UIImage, maxLength: NSInteger, cyles: Int = 6) -> Data {
+    var compression: CGFloat = 1
+    var data = image.jpegData(compressionQuality: compression)!
+    if data.count < maxLength {
+        return data
+    }
+    var max: CGFloat = 1
+    var min: CGFloat = 0
+    var bestData: Data = data
+    for _ in 0 ..< cyles {
+        compression = (max + min) / 2
+        data = image.jpegData(compressionQuality: compression)!
+        if Double(data.count) < Double(maxLength) * 0.9 {
+            min = compression
+            bestData = data
+        } else if data.count > maxLength {
+            max = compression
+        } else {
+            bestData = data
+            break
+        }
+    }
+    return bestData
+}
+
+public func resetImgSize(sourceImage: UIImage, maxImageLenght: CGFloat, maxSizeKB: CGFloat) -> Data {
+    var maxSize = maxSizeKB
+    var maxImageSize = maxImageLenght
+    if maxSize <= 0.0 {
+        maxSize = 1024.0
+    }
+    if maxImageSize <= 0.0 {
+        maxImageSize = 1024.0
+    }
+    // 先调整分辨率
+    var newSize = CGSize(width: sourceImage.size.width, height: sourceImage.size.height)
+    let tempHeight = newSize.height / maxImageSize
+    let tempWidth = newSize.width / maxImageSize
+    if tempWidth > 1.0, tempWidth > tempHeight {
+        newSize = CGSize(width: sourceImage.size.width / tempWidth, height: sourceImage.size.height / tempWidth)
+    } else if tempHeight > 1.0, tempWidth < tempHeight {
+        newSize = CGSize(width: sourceImage.size.width / tempHeight, height: sourceImage.size.height / tempHeight)
+    }
+    UIGraphicsBeginImageContext(newSize)
+    sourceImage.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
+    let newImage = UIGraphicsGetImageFromCurrentImageContext()
+    UIGraphicsEndImageContext()
+    var imageData = newImage!.jpegData(compressionQuality: 1.0)
+    var sizeOriginKB: CGFloat = CGFloat((imageData?.count)!) / 1024.0
+    // 调整大小
+    var resizeRate = 0.9
+    while sizeOriginKB > maxSize, resizeRate > 0.1 {
+        imageData = newImage!.jpegData(compressionQuality: CGFloat(resizeRate))
+        sizeOriginKB = CGFloat((imageData?.count)!) / 1024.0
+        resizeRate -= 0.1
+    }
+    return imageData!
+}
+
 /// 获取开屏广告图
 /// - Returns: <#description#>
 public func getLaunchImage() -> UIImage {