100Years пре 1 недеља
родитељ
комит
51603bd582
35 измењених фајлова са 210 додато и 95 уклоњено
  1. 2 2
      AIEmoji.xcodeproj/project.pbxproj
  2. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@2x.png
  3. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@3x.png
  4. 22 0
      AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/Contents.json
  5. BIN
      AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/rotating_picture@2x.png
  6. BIN
      AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/rotating_picture@3x.png
  7. BIN
      AIEmoji/Assets.xcassets/PTP/ptp_upload_example.imageset/ptp_upload_example@2x.png
  8. BIN
      AIEmoji/Assets.xcassets/PTP/ptp_upload_example.imageset/ptp_upload_example@3x.png
  9. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_3D.imageset/ptp_style_3D@2x.png
  10. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_3D.imageset/ptp_style_3D@3x.png
  11. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_8.imageset/ptp_style_8@2x.png
  12. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_8.imageset/ptp_style_8@3x.png
  13. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_Sketch.imageset/ptp_style_Sketch@2x.png
  14. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_Sketch.imageset/ptp_style_Sketch@3x.png
  15. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_new.imageset/ptp_style_new@2x.png
  16. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_new.imageset/ptp_style_new@3x.png
  17. 48 13
      AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/TSAIChangeEmoteVC.swift
  18. 5 3
      AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/View/TSAIChangeEmoteStyleView.swift
  19. 15 4
      AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/ViewModel/TSAIChangeEmoteVM.swift
  20. 1 1
      AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/View/TSGenmojiItemCell.swift
  21. 33 5
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPGeneratorVC/TSPTPGeneratorVC.swift
  22. 4 0
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift
  23. 4 1
      AIEmoji/Common/View/TSPhotoPickerManager/TSPhotoPickerManager.swift
  24. 2 2
      AIEmoji/Res/ai_change_emote_style.json
  25. 44 61
      AIEmoji/Res/photo_to_photo_style.json
  26. 1 1
      AIEmoji/Res/text_to_photo_style.json
  27. 3 0
      AIEmoji/de.lproj/Localizable.strings
  28. 3 0
      AIEmoji/en.lproj/Localizable.strings
  29. 3 0
      AIEmoji/es.lproj/Localizable.strings
  30. 3 0
      AIEmoji/ja.lproj/Localizable.strings
  31. 3 0
      AIEmoji/ko.lproj/Localizable.strings
  32. 3 0
      AIEmoji/pt-BR.lproj/Localizable.strings
  33. 3 0
      AIEmoji/pt-PT.lproj/Localizable.strings
  34. 4 1
      AIEmoji/zh-Hans.lproj/Localizable.strings
  35. 4 1
      AIEmoji/zh-Hant.lproj/Localizable.strings

+ 2 - 2
AIEmoji.xcodeproj/project.pbxproj

@@ -2246,7 +2246,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -2285,7 +2285,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;

BIN
AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "rotating_picture@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "rotating_picture@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/rotating_picture@2x.png


BIN
AIEmoji/Assets.xcassets/Common/rotating_picture.imageset/rotating_picture@3x.png


BIN
AIEmoji/Assets.xcassets/PTP/ptp_upload_example.imageset/ptp_upload_example@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/ptp_upload_example.imageset/ptp_upload_example@3x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_3D.imageset/ptp_style_3D@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_3D.imageset/ptp_style_3D@3x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_8.imageset/ptp_style_8@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_8.imageset/ptp_style_8@3x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_Sketch.imageset/ptp_style_Sketch@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_Sketch.imageset/ptp_style_Sketch@3x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_new.imageset/ptp_style_new@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_new.imageset/ptp_style_new@3x.png


+ 48 - 13
AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/TSAIChangeEmoteVC.swift

@@ -19,6 +19,7 @@ class TSAIChangeEmoteVC: TSBaseVC {
             topImageView.image = upLoadImage
         }
     }
+    
     lazy var photoPickerManager: TSPhotoPickerManager = {
         let photoPickerManager = TSPhotoPickerManager(viewController: self)
         return photoPickerManager
@@ -46,18 +47,9 @@ class TSAIChangeEmoteVC: TSBaseVC {
     //###################################### 按钮 ######################################
     
     lazy var saveBtn: UIButton = {
-        let btn = UIButton.createButton(title: "Save".localized,backgroundColor: .themeColor,font: .font(size: 12),titleColor: "#111111".uiColor,corner: 14){ [weak self]  in
+        let btn = UIButton.createButton(title: "Save".localized,backgroundColor: .themeColor,font: .font(size: 12,weight: .medium),titleColor: "#111111".uiColor,corner: 14){ [weak self]  in
             guard let self = self else { return }
-            
-            if let img = topImageView.image, let image = img.pngImage{
-                PhotoManagerShared.saveImageToAlbum(image) { success, error in
-                    if success {
-                        kSavePhotoSuccesswShared.show(atView:self.view)
-                    }else{
-                        debugPrint(error)
-                    }
-                }
-            }
+            saveCurrentImage()
         }
         btn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 25, bottom: 0, right: 25)
         return btn
@@ -101,7 +93,35 @@ class TSAIChangeEmoteVC: TSBaseVC {
         }else {
             self.pickSinglePhoto()
         }
-        
+    }
+    
+    override func navBarClickLeftAction() {
+        if viewModel.isNeedSavePhoto{
+            TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
+                message: "You haven't saved the photo yet. Are you sure to quit?".localized,
+                messageColor: .white,
+                messageFont: .systemFont(ofSize: 16),
+                
+                cancelTitle: "Quit".localized,
+                cancelColor: .white,
+                
+                confirmTitle: "Save".localized,
+                confirmColor: .themeColor,
+                
+                cancelAction: { [weak self]  in
+                    guard let self = self else { return }
+                    print("用户点击了Leave")
+                    pop()
+                },
+                confirmAction: { [weak self]  in
+                    guard let self = self else { return }
+                    print("用户点击了Stay")
+                    saveCurrentImage()
+                }
+            ))
+        }else{
+            pop()
+        }
     }
 }
 
@@ -195,13 +215,28 @@ extension TSAIChangeEmoteVC {
         if let image = image {
             upLoadImage = image
             viewModel.upLoadImage = image
-            styleView.agreeWillSelectIndexPath()
+//            styleView.agreeWillSelectIndexPath()
+            styleView.currentIndexPath = IndexPath(item: 1, section: 0)
         }
         
         if upLoadImage == nil {
             pop()
         }
     }
+    
+    func saveCurrentImage(){
+        if let img = topImageView.image, let image = img.pngImage{
+            PhotoManagerShared.saveImageToAlbum(image) {[weak self] success, error in
+                guard let self = self else { return }
+                if success {
+                    viewModel.isSavePhotoMark = true
+                    kSavePhotoSuccesswShared.show(atView:self.view)
+                }else{
+                    debugPrint(error)
+                }
+            }
+        }
+    }
 }
 
 

+ 5 - 3
AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/View/TSAIChangeEmoteStyleView.swift

@@ -166,7 +166,7 @@ class TSAIChangeEmoteStyleCell: TSBaseCollectionCell {
     }()
     
     lazy var boardImageView: UIImageView = {
-        let boardImageView = UIImageView.createImageView(imageName: "ai_emo_selected_border")
+        let boardImageView = UIImageView.createImageView(imageName: "ai_emo_selected_border",contentMode: .scaleToFill)
         boardImageView.isHidden = true
         return boardImageView
     }()
@@ -203,8 +203,10 @@ class TSAIChangeEmoteStyleCell: TSBaseCollectionCell {
  
         bgContentView.addSubview(textLabel)
         textLabel.snp.makeConstraints { make in
-            make.top.equalTo(imageView.snp.bottom).offset(4)
-            make.centerX.equalToSuperview()
+            make.top.equalTo(imageView.snp.bottom).offset(2)
+            make.bottom.equalTo(-2)
+            make.height.equalTo(16.0)
+            make.leading.trailing.equalToSuperview()
         }
     }
     

+ 15 - 4
AIEmoji/Business/TSAILIstVC/TSAIChangeEmoteVC/ViewModel/TSAIChangeEmoteVM.swift

@@ -29,7 +29,17 @@ class TSAIChangeEmoteVM {
     var selectStyleModel:TSGenerateStyleModel?
     
 
-    
+    var isSavePhotoMark:Bool = false
+    var isNeedSavePhoto:Bool {
+        if isSavePhotoMark == false{
+            for model in selectStyleModels {
+                if let _ = model.actionInfoModel {
+                    return true
+                }
+            }
+        }
+        return false
+    }
     //###################################### 生成图片 ######################################
     var uploadRequest:Request?
     var creatRequest:Request?
@@ -43,8 +53,9 @@ class TSAIChangeEmoteVM {
     var upLoadImage:UIImage?{
         didSet{
             imageUrl = nil
+            isSavePhotoMark = false
             for model in selectStyleModels {
-                model.actionInfoModel  = nil
+                model.actionInfoModel = nil
             }
         }
     }
@@ -94,7 +105,7 @@ extension TSAIChangeEmoteVM {
                                 guard let self = self else { return }
                         
                                 let progressInt = Int(progress*10.0)
-                                let progressString = "Generating".localized + " \(90 + progressInt)%"
+                                let progressString = "Changing".localized + " \(90 + progressInt)%"
                                 stateDatauPblished = (.progressString(progressString),nil)
                                 dePrint("生成后图片下载进度 \(progress)")
                             } completion: {[weak self] image in
@@ -146,7 +157,7 @@ extension TSAIChangeEmoteVM {
         }
         
         generatingProgress = progressInt
-        return "Generating".localized + " \(progressInt)%"
+        return "Changing".localized + " \(progressInt)%"
     }
     
     

+ 1 - 1
AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/View/TSGenmojiItemCell.swift

@@ -59,7 +59,7 @@ class TSGenmojiItemCell: TSBaseCollectionCell {
             if itemModel.dataModel.modelType == .example {
                 
                 if itemModel.style == .ptpPicHistory {
-                    textLabel.text = "Ghibli Style Example".localized
+                    textLabel.text = "Example".localized
                 }
                 
                 exampleView.isHidden = false

+ 33 - 5
AIEmoji/Business/TSPTPGeneratorVC/TSPTPGeneratorVC/TSPTPGeneratorVC.swift

@@ -4,11 +4,12 @@
 //
 //  Created by 100Years on 2025/2/26.
 //
-
+import Kingfisher
 class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
     
     var imageModel:TSActionInfoModel?
     var complete:((TSActionInfoModel)->Void)
+    var reloadViewBlock:(()->Void)?
     
     var prompt:String
     var promptSort:String
@@ -41,6 +42,23 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
         return generateInView
     }()
     
+    lazy var rotatingPictureBtn: UIButton = {
+        let rotatingPictureBtn = UIButton.createButton(image:UIImage(named: "rotating_picture")){ [weak self]  in
+            guard let self = self else { return }
+            //旋转图片并储存
+            if let image = netWorkImageView.image?.rotated(by: .degrees90) {
+                netWorkImageView.image = image
+                if let resultUrl = self.imageModel?.response.resultUrl,
+                   let url = URL(string: resultUrl){
+                    ImageCache.default.store(image, forKey: url.cacheKey)
+                    reloadViewBlock?()
+                }
+            }
+        }
+        rotatingPictureBtn.isHidden = true
+        return rotatingPictureBtn
+    }()
+    
     override func createView() {
 
         contentView.addSubview(generateInView)
@@ -49,6 +67,14 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
         }
         
         super.createView()
+        
+        contentView.addSubview(rotatingPictureBtn)
+        rotatingPictureBtn.snp.makeConstraints { make in
+            make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 76)
+            make.trailing.equalTo(-16)
+            make.width.equalTo(40)
+            make.height.equalTo(40)
+        }
     }
     
     override func closePage() {
@@ -88,10 +114,7 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
     //重新生成
     @objc override func clickRegenerateBtn(){
         //判断 vip
-        if kJudgeVip(externalBool: kPurchaseDefault.freeNumAvailable(type: .picToPic) == false, vc: self) {[weak self] in
-            guard let self = self else { return }
-        }{ return }
-        
+        if kJudgeVip(externalBool: kPurchaseDefault.freeNumAvailable(type: .picToPic) == false, vc: self) { return }
         viewModel.uploadAndCreatImage()
     }
     
@@ -156,6 +179,7 @@ extension TSPTPGeneratorVC {
         isClickTheBlankClosePage = false
         bottomView.isHidden = true
         netWorkImageView.isHidden = true
+        rotatingPictureBtn.isHidden = true
     }
     
     func showLoading(){
@@ -166,6 +190,7 @@ extension TSPTPGeneratorVC {
         isClickTheBlankClosePage = false
         bottomView.isHidden = true
         netWorkImageView.isHidden = true
+        rotatingPictureBtn.isHidden = true
     }
     
     func showError(text:String?){
@@ -180,6 +205,7 @@ extension TSPTPGeneratorVC {
         bigSaveBtn.isHidden = true
         bottomView.isHidden = false
         netWorkImageView.isHidden = true
+        rotatingPictureBtn.isHidden = true
     }
     
     func showSuccess(model:TSActionInfoModel){
@@ -193,6 +219,7 @@ extension TSPTPGeneratorVC {
         bigSaveBtn.isHidden = false
         bottomView.isHidden = false
         netWorkImageView.isHidden = false
+        rotatingPictureBtn.isHidden = false
         
         self.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder:kPlaceholderImage,backgroundColor:netWorkImageView.backgroundColor!){ [weak self] image in
             guard let self = self else { return }
@@ -206,4 +233,5 @@ extension TSPTPGeneratorVC {
             complete(model)
         }
     }
+    
 }

+ 4 - 0
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift

@@ -568,6 +568,10 @@ extension TSPTPInputVC {
             updateVipView()
         }
         
+        gennerateVC.reloadViewBlock = { [weak self]  in
+            guard let self = self else { return }
+            collectionComponent.reloadData()
+        }
         kPresentModalVC(target: self, modelVC: gennerateVC,transitionStyle: .crossDissolve)
     }
 

+ 4 - 1
AIEmoji/Common/View/TSPhotoPickerManager/TSPhotoPickerManager.swift

@@ -59,8 +59,11 @@ class TSPhotoPickerManager: NSObject {
         imagePicker.sourceType = .photoLibrary
         imagePicker.delegate = self
         imagePicker.mediaTypes = ["public.image"] // 只选择照片
-//        imagePicker.modalPresentationStyle = .overFullScreen
+        imagePicker.modalPresentationStyle = .overFullScreen
 //        imagePicker.modalTransitionStyle = .crossDissolve
+        if #available(iOS 13.0, *) {
+            imagePicker.overrideUserInterfaceStyle = .dark
+        }
         viewController?.present(imagePicker, animated: true, completion: nil)
     }
     

+ 2 - 2
AIEmoji/Res/ai_change_emote_style.json

@@ -33,14 +33,14 @@
         "imageName": "ai_emo_grin",
         "imageText": "Toothy smile",
         "prompt":"",
-        "style":"big_smile_white_teeth",
+        "style":"classic_white_teeth",
         "isVip": true
     },
     {
         "imageName": "ai_emo_classic_teeth",
         "imageText": "Laugh",
         "prompt":"",
-        "style":"classic_white_teeth",
+        "style":"big_smile_white_teeth",
         "isVip": true
     },
     {

+ 44 - 61
AIEmoji/Res/photo_to_photo_style.json

@@ -8,9 +8,9 @@
         "isVip": true
     },
     {
-        "imageName": "ptp_style_disney",
-        "imageText": "Cute",
-        "prompt":"把图片变成disney风格",
+        "imageName": "ptp_style_Claymation",
+        "imageText": "Claymation",
+        "prompt":"粘土动画风特征",
         "specialStyle":2,
         "isVip": true
     },
@@ -21,32 +21,23 @@
         "isVip": false
     },
     {
-        "imageName": "ptp_style_ukiyoe",
-        "imageText": "Ukiyoe",
-        "prompt":"整体转换为浮世绘风格,保留原始人物面部细节",
-        "specialStyle":2,
-        "isVip": true
-    },
-    {
-        "imageName": "ptp_style_chibi",
-        "imageText": "Chibi",
-        "prompt":"把图片变成 Chibi 风格",
-        "specialStyle":0,
-        "isVip": true
+        "imageName": "ptp_style_6",
+        "imageText": "Classical Painting",
+        "prompt":"Baroque oil painting conversion:  Rembrandt chiaroscuro lighting (3:1 contrast ratio)  Vermeer's ultramarine glaze technique  Impasto brushwork (0.8mm relief depth)  Aged varnish patina simulation  17th-century earth pigment palette (ochre/umber/lead-tin yellow)  Canvas weave retention (100% texture mapping)  Max 2% anatomical adjustment",
+        "isVip": false
     },
     {
-        "imageName": "ptp_style_Claymation",
-        "imageText": "Claymation",
-        "prompt":"粘土动画风特征",
-        "specialStyle":0,
+        "imageName": "ptp_style_disney",
+        "imageText": "Cute",
+        "prompt":"把图片变成disney风格",
+        "specialStyle":2,
         "isVip": true
     },
     {
-        "imageName": "ptp_style_Pixel",
-        "imageText": "Pixel",
-        "prompt":"超精细等距像素艺术,严格16x16像素网格,怀旧游戏机调色板,智能选择性抗锯齿+邻近插值算法,点阵抖动优化",
-        "specialStyle":0,
-        "isVip": true
+        "imageName": "ptp_style_0",
+        "imageText": "Retro Anime",
+        "prompt":"把上传的图片变成美漫风格",
+        "isVip": false
     },
     {
         "imageName": "ptp_style_3D",
@@ -56,32 +47,25 @@
         "isVip": true
     },
     {
-        "imageName": "ptp_style_Sketch",
-        "imageText": "Sketch",
-        "prompt":"A detailed pencil sketch of uploaded photo, bold strokes for shadows, fine lines for details, textured paper background, monochrome, realistic shading --v 5.0",
+        "imageName": "ptp_style_Pixel",
+        "imageText": "Pixel",
+        "prompt":"超精细等距像素艺术,严格16x16像素网格,怀旧游戏机调色板,智能选择性抗锯齿+邻近插值算法,点阵抖动优化",
         "specialStyle":0,
         "isVip": true
     },
     {
-        "imageName": "ptp_style_Toy",
-        "imageText": "Toy",
-        "prompt":"把图片变成LEGO风格",
-        "specialStyle":0,
-        "isVip": false
-    },
-    {
-        "imageName": "ptp_style_0",
-        "imageText": "Retro Anime",
-        "prompt":"1990s cel-anime transformation: 16-color limitation (Toei Animation palette) CRT raster lines (0.3px spacing) Offset printing color bleed (CMYK misregistration) Film grain (ISO 800 Super8 noise profile) Cel-level flat shading Strict pose preservation (98% fidelity)",
+        "imageName": "ptp_style_4",
+        "imageText": "Pop Art",
+        "prompt":"波普艺术肖像:1.3, [上传的图片], 鲜明本戴圆点, 半调网格纹, 粗黑轮廓线, 高饱和霓虹色块, 安迪沃霍尔风格, 罗伊·利希滕斯坦影响, 丝网印刷质感, 漫画美学, 平面色彩过渡, 电光青|荧光粉|酸性黄配色方案, 原始表情保留, 无阴影 --no 渐变, 写实, 立体感",
         "isVip": false
     },
     {
-        "imageName": "ptp_style_6",
-        "imageText": "Classical Painting",
-        "prompt":"Baroque oil painting conversion:  Rembrandt chiaroscuro lighting (3:1 contrast ratio)  Vermeer's ultramarine glaze technique  Impasto brushwork (0.8mm relief depth)  Aged varnish patina simulation  17th-century earth pigment palette (ochre/umber/lead-tin yellow)  Canvas weave retention (100% texture mapping)  Max 2% anatomical adjustment",
-        "isVip": false
+        "imageName": "ptp_style_ukiyoe",
+        "imageText": "Ukiyoe",
+        "prompt":"整体转换为浮世绘风格,保留原始人物面部细节",
+        "specialStyle":0,
+        "isVip": true
     },
-
     {
         "imageName": "ptp_style_1",
         "imageText": "Cyberpunk",
@@ -89,33 +73,32 @@
         "isVip": false
     },
     {
-        "imageName": "ptp_style_4",
-        "imageText": "Pop Art",
-        "prompt":"Warhol-style pop art transformation:  Ben-Day dots (150LPI screen pattern)  Fluorescent CMYK separation (ΔE>20)  Comic book halftone overlay (45° angle)  400% saturation boost on key elements  Silkscreen texture simulation  Bold black outlines (3px weight)",
-        "isVip": false
-    },
-    {
-        "imageName": "ptp_style_2",
-        "imageText": "Retrofuturism",
-        "prompt":"1960s retrofuturism style:  Googie architecture curves (radius 12-24px)  Atomic age starburst patterns (density 0.5/cm²)  Bakelite material simulation (IOR 1.55)  Vacuum tube glow effect (2700K color temp)  Vintage sci-fi typography overlay (15% opacity)  Chrome plating with hairline finish",
-        "isVip": false
+        "imageName": "ptp_style_Sketch",
+        "imageText": "Sketch",
+        "prompt":"上传的照片变成铅笔素描:1.4,精准线条排列,明暗对比层次,阴影线刻画,轻微纸张纹理,100%原图结构锁定,零表情修改 --no 颜色 渐变 立体感 噪点,炭笔灰度:0.7,橡皮擦痕:0.3",
+        "specialStyle":0,
+        "isVip": true
     },
     {
         "imageName": "ptp_style_8",
         "imageText": "Photorealism",
-        "prompt":"Photorealistic conversion with surgical precision:  99% geometric fidelity to source  Hyper-detailed PBR rendering (8K texture sampling): • Subsurface scattering (IOR 1.45 @ 550nm) • Microsurface anisotropy (roughness 0.02-0.8) • Physically accurate caustics  Environmental lighting simulation: • Global illumination (256 samples) • HDRI environment mapping (measured 10,000 lux) • Raytraced ambient occlusion (radius 1.2m)  Material fidelity controls: • Spectral reflectance matching (ΔE<2) • Surface imperfection overlay (dust/dents: 0.3% density) • Directional fabric weave simulation  Optical truth parameters: • Simulate Sony α7 IV 61MP sensor • Zeiss Otus 55mm f/1.4 MTF curve • 14-stop dynamic range preservation  Strict prohibitions: No stylistic DOF/bokeh artifacts Zero creative reinterpretation Max 0.5% shape deviation tolerance",
+        "prompt":"上传的照片变成超写实照片级细节:1.5,皮肤毛孔/发丝/织物纤维高清刻画,自然光影立体感,4K电影质感,蔡司85mm f/1.4镜头焦外虚化,100%原图主体保留,面部零修改 --no 卡通化 艺术化 模糊 噪点",
         "isVip": false
     },
+    
+    
     {
-        "imageName": "ptp_style_9",
-        "imageText": "Modern Digital Art",
-        "prompt":"Modern digital art transformation with parametric control:  Core structure retention (95% geometric integrity)  Glitch-core aesthetic injection: • 3D liquid metal flow (viscosity 0.7 Pa·s) • Holographic grid overlay (hex density 12/cm²) • Cybernetic light trails (speed 120px/s)  Neuromorphic rendering:  PBR shaders with 0.35 roughness variance  Quantum gradient palette (#6A4C93 → #00F5D4)  Neural network brush dynamics  Controlled abstraction: • 15-30% polygon remeshing (non-destructive) • Parametric waveform distortion (λ=24px) • Augmented reality UI elements (HUD opacity 22%)  Prohibitions:  Max 5% shape decomposition  ΔE<10 color shift tolerance  Zero organic texture retention  Rendering specs: • 8K procedural texture generation • Unreal Engine 5 Lumen lighting simulation • Substance Designer material algorithm",
-        "isVip": false
+        "imageName": "ptp_style_Toy",
+        "imageText": "Toy",
+        "prompt":"把图片变成LEGO风格",
+        "specialStyle":0,
+        "isVip": true
     },
     {
-        "imageName": "ptp_style_3",
-        "imageText": "Vaporwave",
-        "prompt":"Vaporwave aesthetic conversion:  Memphis Group pattern infusion (density 30%)  CRT magenta/cyan shift (ΔE 12-15)  Marble texture x digital grid fusion  1980s CGI primitive modeling (32-poly limit)  Palm tree/PVC column hybrid elements  VHS tracking error simulation (VHS-C NTSC)",
-        "isVip": false
+        "imageName": "ptp_style_chibi",
+        "imageText": "Chibi",
+        "prompt":"把图片变成 Chibi 风格",
+        "specialStyle":0,
+        "isVip": true
     }
 ]

+ 1 - 1
AIEmoji/Res/text_to_photo_style.json

@@ -8,7 +8,7 @@
     },
     {
         "imageName": "ttp_style_10",
-        "imageText": "Ghibli",
+        "imageText": "Anime",
         "prompt":"ghibli ${user_input}, Studio Ghibli-styled masterpiece,(Miyazaki's pastel palette:teal|ochre|coral), dynamic cloud shadows, (hand-drawn line imperfections:1.2), 3/4 perspective view,  (nature reclaiming civilization motif), (Kiki's Delivery Service lighting:1.1),  --no 3D,octane,hyperrealistic,digital art --style_boost 80",
         "specialStyle":1,
         "isVip": true

+ 3 - 0
AIEmoji/de.lproj/Localizable.strings

@@ -177,3 +177,6 @@
 "Change Emotion" = "Ausdruck ändern";
 "Change your facial emotion in one click" = "Ändern Sie Ihre Gesichtsemotion mit einem Klick";
 "Anime" = "Anime";
+"You haven't saved the photo yet. Are you sure to quit?" = "Sie haben das Foto noch nicht gespeichert. Sind Sie sicher, dass Sie aufhören?";
+"Quit" = "Aufhören";
+"Changing" = "Ändern";

+ 3 - 0
AIEmoji/en.lproj/Localizable.strings

@@ -174,3 +174,6 @@
 "Change Emotion" = "Change Emotion";
 "Change your facial emotion in one click" = "Change your facial emotion in one click";
 "Anime" = "Anime";
+"You haven't saved the photo yet. Are you sure to quit?" = "You haven't saved the photo yet. Are you sure to quit?";
+"Quit" = "Quit";
+"Changing" = "Changing";

+ 3 - 0
AIEmoji/es.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Change Emotion" = "cambiar de expresión";
 "Change your facial emotion in one click" = "Cambia tu emoción facial en un clic";
 "Anime" = "Animado";
+"You haven't saved the photo yet. Are you sure to quit?" = "Aún no has guardado la foto. ¿Estás seguro de dejarlo?";
+"Quit" = "Abandonar";
+"Changing" = "Cambio";

+ 3 - 0
AIEmoji/ja.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Change Emotion" = "表情を変える";
 "Change your facial emotion in one click" = "ワンクリックで顔の感情を変更します";
 "Anime" = "アニメ";
+"You haven't saved the photo yet. Are you sure to quit?" = "まだ写真を保存していません。本当に辞めますか?";
+"Quit" = "やめる";
+"Changing" = "変化";

+ 3 - 0
AIEmoji/ko.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Change Emotion" = "표현 변경";
 "Change your facial emotion in one click" = "클릭 한 번으로 얼굴 감정을 바꿔보세요";
 "Anime" = "만화";
+"You haven't saved the photo yet. Are you sure to quit?" = "아직 사진을 저장하지 않았습니다. 정말 그만두시겠어요?";
+"Quit" = "그만두다";
+"Changing" = "작고 보기 어리석은 동물";

+ 3 - 0
AIEmoji/pt-BR.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Change Emotion" = "mudar expressão";
 "Change your facial emotion in one click" = "Mude sua emoção facial com um clique";
 "Anime" = "Anime";
+"You haven't saved the photo yet. Are you sure to quit?" = "Você ainda não salvou a foto. Tem certeza de desistir?";
+"Quit" = "Desistir";
+"Changing" = "Mudando";

+ 3 - 0
AIEmoji/pt-PT.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Change Emotion" = "mudar expressão";
 "Change your facial emotion in one click" = "Mude sua emoção facial com um clique";
 "Anime" = "Anime";
+"You haven't saved the photo yet. Are you sure to quit?" = "Você ainda não salvou a foto. Tem certeza de desistir?";
+"Quit" = "Desistir";
+"Changing" = "Mudando";

+ 4 - 1
AIEmoji/zh-Hans.lproj/Localizable.strings

@@ -168,8 +168,11 @@
 "Reluctant" = "勉强";
 "Cool" = "酷";
 "Sad" = "伤心";
-"None" = "没有任何";
+"None" = "原始效果";
 "Change" = "改变";
 "Change Emotion" = "改变表情";
 "Change your facial emotion in one click" = "一键改变你的面部表情";
 "Anime" = "动漫";
+"You haven't saved the photo yet. Are you sure to quit?" = "您尚未保存照片。你确定要退出吗?";
+"Quit" = "退出";
+"Changing" = "改变";

+ 4 - 1
AIEmoji/zh-Hant.lproj/Localizable.strings

@@ -160,8 +160,11 @@
 "Reluctant" = "勉強";
 "Cool" = "酷";
 "Sad" = "傷心";
-"None" = "沒有任何";
+"None" = "原始效果";
 "Change" = "改變";
 "Change Emotion" = "改變表情";
 "Change your facial emotion in one click" = "一鍵改變你的臉部表情";
 "Anime" = "動漫";
+"You haven't saved the photo yet. Are you sure to quit?" = "您尚未儲存照片。你確定要退出嗎?";
+"Quit" = "退出";
+"Changing" = "改變";