소스 검색

添加新图片修改大小方法

jsonwang 3 년 전
부모
커밋
aec028b21d
1개의 변경된 파일69개의 추가작업 그리고 2개의 파일을 삭제
  1. 69 2
      BFCommonKit/Classes/BFCategorys/BFUIImage+Ext.swift

+ 69 - 2
BFCommonKit/Classes/BFCategorys/BFUIImage+Ext.swift

@@ -158,6 +158,28 @@ public extension UIImage {
         UIGraphicsEndImageContext()
         return image
     }
+    
+    func nx_scaleWithMaxLength(maxLength: CGFloat,completion: @escaping ( _ image: UIImage) -> Void)  {
+        
+        var maxWidth: CGFloat = maxLength
+        var maxHeight: CGFloat = maxLength
+
+        if size.width != size.height {
+            if size.width > size.height {
+                // 按照宽 来缩放
+                let imageScale: CGFloat = maxLength / size.width
+
+                maxHeight = size.height * imageScale
+            } else if size.width < size.height {
+                let imageScale: CGFloat = maxLength / size.height
+
+                maxWidth = size.width * imageScale
+            }
+        }
+       self.processImage(image: self, size:  CGSize(width: maxWidth, height: maxHeight)) { newImage in
+            completion(newImage)
+       }
+    }
 
     /// 按照最短边缩放  add by ak
     /// - Parameter maxLength: 边长最大值
@@ -178,12 +200,57 @@ public extension UIImage {
                     maxWidth = size.width * imageScale
                 }
             }
+
             // 返回新的改变大小后的图片
             return nx_scaleToSize(size: CGSize(width: maxWidth, height: maxHeight))
         }
 
         return self
     }
+    
+    func processImage(image: UIImage, size: CGSize,completion: @escaping ( _ image: UIImage) -> Void) {
+        DispatchQueue.global().async {
+            var width: CGFloat = CGFloat(image.cgImage?.width ?? 0)
+            var height: CGFloat = CGFloat(image.cgImage?.height ?? 0)
+
+            let verticalRadio: CGFloat = size.height * 1.0 / height
+            let horizontalRadio: CGFloat = size.width * 1.0 / width
+
+            var radio: CGFloat = 1
+            if verticalRadio > 1, horizontalRadio > 1 {
+                radio = verticalRadio > horizontalRadio ? horizontalRadio : verticalRadio
+            } else {
+                radio = verticalRadio < horizontalRadio ? verticalRadio : horizontalRadio
+            }
+
+            width = width * radio
+            height = height * radio
+
+            let xPos: CGFloat = (size.width - width) / 2
+            let yPos: CGFloat = (size.height - height) / 2
+
+            // 创建一个bitmap的context
+            // 并把它设置成为当前正在使用的context
+            UIGraphicsBeginImageContext(size)
+
+            // 绘制改变大小的图片
+            var rect = CGRect.zero
+            rect.size.width = width
+            rect.size.height = height
+            rect.origin.x = xPos
+            rect.origin.y = yPos
+
+            image.draw(in: rect)
+
+            // 从当前context中创建一个改变大小后的图片
+            let scaledImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
+            
+            // 使当前的context出堆栈
+            UIGraphicsEndImageContext()
+            completion(scaledImage)
+        }
+     
+    }
 
     /// 缩放到指定大小 add by ak
     /// - Parameter size: 新的大小
@@ -222,10 +289,10 @@ public extension UIImage {
 
         // 从当前context中创建一个改变大小后的图片
         let scaledImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
-
+        
         // 使当前的context出堆栈
         UIGraphicsEndImageContext()
-
+        
         // 返回新的改变大小后的图片
         return scaledImage
     }