From 8bf5e5ac56be4ac3e8f097a8f6f98249a2480538 Mon Sep 17 00:00:00 2001 From: Pierre Brisorgueil Date: Sat, 10 Apr 2021 18:03:56 +0200 Subject: [PATCH] =?UTF-8?q?feat(helpers):=20add=20resize=20image=20before?= =?UTF-8?q?=20compression=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- waosSwift/config/default/development.json | 1 + .../lib/helpers/Extensions/UIImage.swift | 26 ++++++++++++++++--- .../core/controllers/CoreFormController.swift | 1 + .../controllers/UserViewController.swift | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/waosSwift/config/default/development.json b/waosSwift/config/default/development.json index c98af37..b442a04 100644 --- a/waosSwift/config/default/development.json +++ b/waosSwift/config/default/development.json @@ -74,6 +74,7 @@ ], "img": { "compresion": 0.25, + "max": 4096, "styles": { "blured": 10, "overlayFraction": 0.9 diff --git a/waosSwift/lib/helpers/Extensions/UIImage.swift b/waosSwift/lib/helpers/Extensions/UIImage.swift index 30ef88a..61f9667 100644 --- a/waosSwift/lib/helpers/Extensions/UIImage.swift +++ b/waosSwift/lib/helpers/Extensions/UIImage.swift @@ -27,7 +27,7 @@ extension UIImage { guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self } return UIImage(cgImage: cgImage2) } - + /** * @desc lighter image * @param {CGFloat} percentage, @@ -35,7 +35,7 @@ extension UIImage { func lighter(by percentage: CGFloat = 30) -> UIImage? { return self.adjust(by: abs(percentage) ) } - + /** * @desc darker image * @param {CGFloat} percentage, @@ -43,7 +43,7 @@ extension UIImage { func darker(by percentage: CGFloat = 30) -> UIImage? { return self.adjust(by: -1 * abs(percentage) ) } - + /** * @desc adjust image darkness / lightness from coefficient * @param {CGFloat} percentage, @@ -59,7 +59,7 @@ extension UIImage { guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self } return UIImage(cgImage: cgImage2) } - + /** * @desc adjust image orientation if needed in exif */ @@ -75,4 +75,22 @@ extension UIImage { return result } } + + /** + * @desc resizeImage width max target Size + */ + func resizeImage(targetSize: CGSize) -> UIImage? { + let size = self.size + let widthRatio = targetSize.width / size.width + let heightRatio = targetSize.height / size.height + let newSize = widthRatio > heightRatio ? CGSize(width: size.width * heightRatio, height: size.height * heightRatio) : CGSize(width: size.width * widthRatio, height: size.height * widthRatio) + let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height) + + UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) + self.draw(in: rect) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return newImage + } } diff --git a/waosSwift/modules/core/controllers/CoreFormController.swift b/waosSwift/modules/core/controllers/CoreFormController.swift index f882063..f818ac3 100644 --- a/waosSwift/modules/core/controllers/CoreFormController.swift +++ b/waosSwift/modules/core/controllers/CoreFormController.swift @@ -38,6 +38,7 @@ class CoreFormController: FormViewController { static let tabBarTitle = NSString(string: config["theme"]["tabBar"]["title"].string ?? "").boolValue static let tabBarBorder = NSString(string: config["theme"]["tabBar"]["border"].string ?? "").boolValue static let imgCompression = CGFloat(config["img"]["compresion"].float ?? 1.0) + static let imgMax = CGFloat(config["img"]["max"].float ?? 4096) static let margin = CGFloat(config["theme"]["global"]["margin"].int ?? 0) static let radius = CGFloat(config["theme"]["global"]["radius"].int ?? 0) static let timesButtonsThrottle = Int(config["times"]["buttons"]["throttle"].int ?? 2000) diff --git a/waosSwift/modules/users/controllers/UserViewController.swift b/waosSwift/modules/users/controllers/UserViewController.swift index 8ecd6b1..5310ae9 100644 --- a/waosSwift/modules/users/controllers/UserViewController.swift +++ b/waosSwift/modules/users/controllers/UserViewController.swift @@ -142,7 +142,7 @@ class UserViewController: CoreFormController, View { <<< self.inputAvatar.cellUpdate { cell, _ in cell.accessoryView?.layer.cornerRadius = (cell.accessoryView?.frame.height ?? 20)/2 }.onChange({ (img) in - if let aux = img.value?.adjustOrientation() { + if let aux = img.value?.adjustOrientation()?.resizeImage(targetSize: CGSize(width: Metric.imgMax, height: Metric.imgMax)) { self.avatar.accept(aux.jpegData(compressionQuality: Metric.imgCompression)) } else { self.avatar.accept(nil)