Parcourir la source

图片去除大小限制,上传图片时候,自动压缩至合适的大小

100Years il y a 6 jours
Parent
commit
2b8de57332

+ 2 - 1
AIEmoji/Business/TSAILIstVC/TSAIAgeImageHintVC/TSAIListHintBaseVC.swift

@@ -208,7 +208,8 @@ class TSAIListHintBaseVC: TSBaseVC {
     }
     
     func pickSinglePhoto()  {
-        photoPickerManager.pickSinglePhoto(maxBitSize: config.imageMaxBitSize) { [weak self] image, errorString in
+//        photoPickerManager.pickSinglePhoto(maxBitSize: config.imageMaxBitSize) { [weak self] image, errorString in
+        photoPickerManager.pickCustomSinglePhoto() { [weak self] image, errorString in
             guard let self = self else { return }
             if let errorString = errorString {
                 TSToastShared.showToast(text: errorString)

+ 2 - 1
AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/TSAIChangeEmoteVC.swift

@@ -211,7 +211,8 @@ extension TSAIChangeEmoteVC {
 extension TSAIChangeEmoteVC {
     
     func pickSinglePhoto()  {
-        photoPickerManager.pickSinglePhoto(maxBitSize: kUploadImageMaxBit10Size) { [weak self] image, errorString in
+//        photoPickerManager.pickSinglePhoto(maxBitSize: kUploadImageMaxBit10Size) { [weak self] image, errorString in
+        photoPickerManager.pickCustomSinglePhoto() { [weak self] image, errorString in
             guard let self = self else { return }
             if let errorString = errorString {
                 TSToastShared.showToast(text: errorString)

+ 14 - 39
AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/ViewModel/TSAIChangeEmoteVM.swift

@@ -229,11 +229,13 @@ extension TSAIChangeEmoteVM {
             return
         }
         
+        guard let upLoadImage = upLoadImage else { return }
+
         stopNetwork = false
         stateDatauPblished = (.start,nil)
         
         stateDatauPblished = (.progressString(uploadingPhoto(progress: 0.0)),nil)
-        uploadImage { [weak self]  progress in
+        uploadRequest = TSNetworkShared.uploadImage(upLoadImage: upLoadImage, maxKb: imageMaxKb) { [weak self]  progress in
             guard let self = self else { return }
             if generatingProgress == 0 {
                 stateDatauPblished = (.progressString(uploadingPhoto(progress: progress)),nil)
@@ -252,6 +254,17 @@ extension TSAIChangeEmoteVM {
         }
     }
     
+    var imageMaxKb:Int{
+        switch style {
+        case .changeEmote:
+            return 10*1024
+        case .changehairColor:
+            return 10*1024
+        case .changehair:
+            return 10*1024
+        }
+    }
+    
     func uploadingPhoto(progress:Float) -> String {
         //Uploading Photo 0%-100%
         var progressInt = Int(progress*100)
@@ -260,44 +273,6 @@ extension TSAIChangeEmoteVM {
         }
         return "Uploading Photo".localized + " \(progressInt)%"
     }
-    
-    func uploadImage(
-        progressHandler: @escaping (Float) -> Void, // 上传进度回调
-        completion: @escaping (Any?, Error?) -> Void)
-    {
-        guard let imageData = upLoadImage?.pngData() else { return }
-        stateDatauPblished = (.start,nil)
-        let dataArray = [
-            ["data": imageData,
-             "fieldName": "file", // 字段名
-             "fileName": "image.png", // 文件名
-             "mimeType": "image/png" // MIME 类型
-            ]
-        ]
-        
-        uploadRequest = TSNetworkShared.uploadData(
-            urlType: .upload,
-            dataArray: dataArray,
-            progressHandler: { progress in
-                progressHandler(progress)
-            },completion: { [weak self] result in
-            guard let self = self else { return }
-            switch result {
-            case .success(let data):
-                if let dataDict = data as? [String:Any] ,
-                   dataDict.safeInt(forKey: "code") == 200,
-                   let picUrl = dataDict["result"] as? String{
-                    completion(picUrl,nil)
-                }else{
-                    let error = NSError(domain: "Service exception", code: 0)
-                    completion(nil,error)
-                }
-            case .failure(let error):
-                completion(nil,error)
-            }
-        })
-    }
-    
 }
 
 extension TSAIChangeEmoteVM {

+ 2 - 1
AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstVC.swift

@@ -354,7 +354,8 @@ extension TSAILIstVC{
     }
     
     func pickSinglePhoto(maxBitSize:Int,complete: @escaping (UIImage)->Void)  {
-        photoPickerManager.pickSinglePhoto(maxBitSize: maxBitSize) { [weak self] image, errorString in
+//        photoPickerManager.pickSinglePhoto(maxBitSize: maxBitSize) { [weak self] image, errorString in
+        photoPickerManager.pickCustomSinglePhoto() { [weak self] image, errorString in
             guard let self = self else { return }
             if let errorString = errorString {
                 TSToastShared.showToast(text: errorString)

+ 17 - 43
AIEmoji/Business/TSAILIstVC/TSAIPhotoGeneratorBaseVC/TSAIPhotoGeneratorBaseVM/TSAIListPhotoGeneratorBaseVM.swift

@@ -172,12 +172,12 @@ class TSAIListPhotoGeneratorBaseVM {
             creatImage()
             return
         }
-        
+  
         stopNetwork = false
         stateDatauPblished = (.start,nil)
         
         stateDatauPblished = (.progressString(uploadingPhoto(progress: 0.0)),nil)
-        uploadImage { [weak self]  progress in
+        uploadRequest = TSNetworkShared.uploadImage(upLoadImage: upLoadImage, maxKb: imageMaxKb) { [weak self]  progress in
             guard let self = self else { return }
             if generatingProgress == 0 {
                 stateDatauPblished = (.progressString(uploadingPhoto(progress: progress)),nil)
@@ -196,6 +196,21 @@ class TSAIListPhotoGeneratorBaseVM {
         }
     }
     
+    var imageMaxKb:Int{
+        switch generatorStyle {
+        case .ageOld:
+            return 10*1024
+        case .ageChild:
+            return 10*1024
+        case .oldPhoto:
+            return 5*1024
+        case .eyeOpen:
+            return 5*1024
+        case .pretty:
+            return 5*1024
+        }
+    }
+    
     func uploadingPhoto(progress:Float) -> String {
         //Uploading Photo 0%-100%
         var progressInt = Int(progress*100)
@@ -229,44 +244,3 @@ class TSAIListPhotoGeneratorBaseVM {
         return "Generating".localized
     }
 }
-
-
-extension TSAIListPhotoGeneratorBaseVM {
-    func uploadImage(
-        progressHandler: @escaping (Float) -> Void, // 上传进度回调
-        completion: @escaping (Any?, Error?) -> Void)
-    {
-        guard let imageData = upLoadImage.pngData() else { return }
-        stateDatauPblished = (.start,nil)
-        let dataArray = [
-            ["data": imageData,
-             "fieldName": "file", // 字段名
-             "fileName": "image.png", // 文件名
-             "mimeType": "image/png" // MIME 类型
-            ]
-        ]
-        
-        uploadRequest = TSNetworkShared.uploadData(
-            urlType: .upload,
-            dataArray: dataArray,
-            progressHandler: { progress in
-                progressHandler(progress)
-            },completion: { [weak self] result in
-            guard let self = self else { return }
-            switch result {
-            case .success(let data):
-                if let dataDict = data as? [String:Any] ,
-                   dataDict.safeInt(forKey: "code") == 200,
-                   let picUrl = dataDict["result"] as? String{
-                    completion(picUrl,nil)
-                }else{
-                    let error = NSError(domain: "Service exception", code: 0)
-                    completion(nil,error)
-                }
-            case .failure(let error):
-                completion(nil,error)
-            }
-        })
-    }
-    
-}

+ 2 - 1
AIEmoji/Business/TSAILIstVC/TSAIUploadPhotoBaseVC/TSAIUploadPhotoBaseVC.swift

@@ -249,7 +249,8 @@ extension TSAIUploadPhotoBaseVC {
     }
     
     func pickSinglePhoto()  {
-        photoPickerManager.pickSinglePhoto(maxBitSize: imageMaxBitSize) { [weak self] image, errorString in
+//        photoPickerManager.pickSinglePhoto(maxBitSize: imageMaxBitSize) { [weak self] image, errorString in
+        photoPickerManager.pickCustomSinglePhoto() { [weak self] image, errorString in
             guard let self = self else { return }
             if let errorString = errorString {
                 TSToastShared.showToast(text: errorString)

+ 5 - 42
AIEmoji/Business/TSPTPGeneratorVC/TSPTPGeneratorVC/VM/TSPTPGeneratorVM.swift

@@ -171,7 +171,7 @@ class TSPTPGeneratorVM {
         stateDatauPblished = (.start,nil)
         
         stateDatauPblished = (.progressString(uploadingPhoto(progress: 0.0)),nil)
-        uploadImage { [weak self]  progress in
+        uploadRequest = TSNetworkShared.uploadImage(upLoadImage: upLoadImage, maxKb: imageMaxKb) { [weak self]  progress in
             guard let self = self else { return }
             if generatingProgress == 0 {
                 stateDatauPblished = (.progressString(uploadingPhoto(progress: progress)),nil)
@@ -190,6 +190,10 @@ class TSPTPGeneratorVM {
         }
     }
     
+    var imageMaxKb:Int{
+        return 10*1024
+    }
+    
     func uploadingPhoto(progress:Float) -> String {
         //Uploading Photo 0%-100%
         var progressInt = Int(progress*100)
@@ -212,44 +216,3 @@ class TSPTPGeneratorVM {
         return "Generating".localized + " \(progressInt)%"
     }
 }
-
-
-extension TSPTPGeneratorVM {
-    func uploadImage(
-        progressHandler: @escaping (Float) -> Void, // 上传进度回调
-        completion: @escaping (Any?, Error?) -> Void)
-    {
-        guard let imageData = upLoadImage.pngData() else { return }
-        stateDatauPblished = (.start,nil)
-        let dataArray = [
-            ["data": imageData,
-             "fieldName": "file", // 字段名
-             "fileName": "image.png", // 文件名
-             "mimeType": "image/png" // MIME 类型
-            ]
-        ]
-        
-        uploadRequest = TSNetworkShared.uploadData(
-            urlType: .upload,
-            dataArray: dataArray,
-            progressHandler: { progress in
-                progressHandler(progress)
-            },completion: { [weak self] result in
-            guard let self = self else { return }
-            switch result {
-            case .success(let data):
-                if let dataDict = data as? [String:Any] ,
-                   dataDict.safeInt(forKey: "code") == 200,
-                   let picUrl = dataDict["result"] as? String{
-                    completion(picUrl,nil)
-                }else{
-                    let error = NSError(domain: "Service exception", code: 0)
-                    completion(nil,error)
-                }
-            case .failure(let error):
-                completion(nil,error)
-            }
-        })
-    }
-    
-}

+ 2 - 1
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift

@@ -87,7 +87,8 @@ class TSPTPInputVC: TSBaseVC {
     
     
     func pickSinglePhoto()  {
-        photoPickerManager.pickSinglePhoto(maxBitSize: kUploadImageMaxBit10Size) { [weak self] image, errorString in
+//        photoPickerManager.pickSinglePhoto(maxBitSize: kUploadImageMaxBit10Size) { [weak self] image, errorString in
+        photoPickerManager.pickCustomSinglePhoto() { [weak self] image, errorString in
             guard let self = self else { return }
             if let errorString = errorString {
                 TSToastShared.showToast(text: errorString)

+ 0 - 44
AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/VM/TSPhotoToPhotoVM.swift

@@ -199,47 +199,3 @@ extension TSPhotoToPhotoVM {
     }
     
 }
-
-
-
-
-extension TSPhotoToPhotoVM {
-    func uploadImage(
-        progressHandler: @escaping (Float) -> Void, // 上传进度回调
-        completion: @escaping (Any?, Error?) -> Void)
-    {
-        guard let image = upLoadImage else { return }
-        guard let imageData = image.pngData() else { return }
-        stateDatauPblished = (.start,nil)
-        let dataArray = [
-            ["data": imageData,
-             "fieldName": "file", // 字段名
-             "fileName": "image.png", // 文件名
-             "mimeType": "image/png" // MIME 类型
-            ]
-        ]
-        
-        uploadRequest = TSNetworkShared.uploadData(
-            urlType: .upload,
-            dataArray: dataArray,
-            progressHandler: { progress in
-                progressHandler(progress)
-            },completion: { [weak self] result in
-            guard let self = self else { return }
-            switch result {
-            case .success(let data):
-                if let dataDict = data as? [String:Any] ,
-                   dataDict.safeInt(forKey: "code") == 200,
-                   let picUrl = dataDict["result"] as? String{
-                    completion(picUrl,nil)
-                }else{
-                    let error = NSError(domain: "Service exception", code: 0)
-                    completion(nil,error)
-                }
-            case .failure(let error):
-                completion(nil,error)
-            }
-        })
-    }
-    
-}

+ 2 - 1
AIEmoji/Business/VIewTool/TSViewTool.swift

@@ -89,6 +89,7 @@ class TSSavePhotoSuccessTool {
                 }
             }
         }
+        viewButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 12, bottom: 0, right: 12)
         return viewButton
     }()
     
@@ -125,7 +126,7 @@ class TSSavePhotoSuccessTool {
         view.addSubview(viewButton)
         view.addSubview(textLabel)
         viewButton.snp.makeConstraints { make in
-            make.width.equalTo(65)
+//            make.width.equalTo(65)
             make.height.equalTo(28)
             make.trailing.equalTo(-8)
             make.centerY.equalToSuperview()

+ 56 - 35
AIEmoji/Common/NetworkManager/TSNetWork/TSNetWork+Business.swift

@@ -74,40 +74,6 @@ extension TSNetworkManager {
         }
     }
     
-//    /// 通用 POST Stream 请求
-//    /// - Parameters:
-//    ///   - endpoint: 接口路径
-//    ///   - parameters: 请求参数
-//    ///   - responseType: 响应数据模型(可选)
-//    ///   - completion: 请求完成的回调
-//    func postStream<T: TSBaseModel>(
-//        urlType: TSNeURLType,
-//        parameters: [String: Any]? = nil,
-//        responseType: T.Type? = nil,
-//        streamHandler:@escaping (String) -> Void,
-//        completion: @escaping (Result<Any, Error>) -> Void
-//    ) -> StreamPostRequest{
-//        let urlString = urlType.getUrlString()
-//        
-//        let streamRequest = StreamPostRequest(url: URL(string: urlString)!, parameters: parameters) { data in
-//            if let string = String(data: data, encoding: .utf8) {
-//                print("Received chunk: \(string)")
-//                streamHandler(string)
-//            }
-//        } completionHandler: { error in
-//            if let error = error {
-//                print("Request failed with error: \(error)")
-//                completion(.failure(error))
-//            } else {
-//                print("Request completed successfully.")
-//                completion(.success("success"))
-//            }
-//        }
-//        streamRequest.startRequest()
-//        return streamRequest
-//    }
-    
-    
     /// 通用 POST Stream 请求
     /// - Parameters:
     ///   - endpoint: 接口路径
@@ -151,5 +117,60 @@ extension TSNetworkManager {
 
 }
 
+extension TSNetworkManager {
+    
+    func uploadImage(
+        upLoadImage:UIImage,
+        maxKb:Int,
+        progressHandler: @escaping (Float) -> Void, // 上传进度回调
+        completion: @escaping (Any?, Error?) -> Void)
+    -> Request?{
+        
+        guard let imageData = TSImageCompress.compressImageToTargetSize(upLoadImage, targetSizeKB: maxKb, preserveTransparency: false) else {
+            completion(nil,NSError(domain: "image nil", code: 0))
+            return nil
+        }
+        
+        var dataArray:[[String:Any]] = []
+        if upLoadImage.hasAlphaChannel(){
+            dataArray = [
+                ["data": imageData,
+                 "fieldName": "file", // 字段名
+                 "fileName": "image.png", // 文件名
+                 "mimeType": "image/png" // MIME 类型
+                ]
+            ]
+        }else {
+            dataArray = [
+                ["data": imageData,
+                 "fieldName": "file", // 字段名
+                 "fileName": "image.jpeg", // 文件名
+                 "mimeType": "image/jpeg" // MIME 类型
+                ]
+            ]
+        }
 
-
+        return TSNetworkShared.uploadData(
+            urlType: .upload,
+            dataArray: dataArray,
+            progressHandler: { progress in
+                progressHandler(progress)
+            },completion: { [weak self] result in
+            guard let self = self else { return }
+            switch result {
+            case .success(let data):
+                if let dataDict = data as? [String:Any] ,
+                   dataDict.safeInt(forKey: "code") == 200,
+                   let picUrl = dataDict["result"] as? String{
+                    completion(picUrl,nil)
+                }else{
+                    let error = NSError(domain: "Service exception", code: 0)
+                    completion(nil,error)
+                }
+            case .failure(let error):
+                completion(nil,error)
+            }
+        })
+    }
+    
+}

+ 9 - 0
AIEmoji/Common/View/TSPhotoPickerManager/TSPhotoPickerManager.swift

@@ -117,6 +117,15 @@ extension TSPhotoPickerManager: UIImagePickerControllerDelegate, UINavigationCon
 
 extension TSPhotoPickerManager{
     
+    func pickCustomSinglePhoto(completion: @escaping (UIImage?,String?) -> Void) {
+        self.completionSizeHandler = completion
+        pickSinglePhoto { [weak self] image,phAsset in
+            guard let self = self else { return }
+            self.completionSizeHandler?(image,nil)
+            self.completionSizeHandler = nil
+        }
+    }
+    
     // MARK: - Public Methods
     /// 打开照片选择器,单选一张照片
     func pickSinglePhoto(maxBitSize:Int, completion: @escaping (UIImage?,String?) -> Void) {