|
@@ -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
|
|
|
}
|