Browse Source

修改 bug

100Years 1 month ago
parent
commit
9ad25c7041
38 changed files with 480 additions and 71 deletions
  1. 2 2
      AIEmoji.xcodeproj/project.pbxproj
  2. 1 1
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_7.imageset/Contents.json
  3. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_7.imageset/ptp_style_7@2x 1.png
  4. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_7.imageset/ptp_style_7@2x.png
  5. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_7.imageset/ptp_style_7@3x.png
  6. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_ChinesePaperCut.imageset/ptp_style_ChinesePaperCut@2x.png
  7. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_ChinesePaperCut.imageset/ptp_style_ChinesePaperCut@3x.png
  8. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_HealingDoodle.imageset/ptp_style_HealingDoodle@2x.png
  9. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_HealingDoodle.imageset/ptp_style_HealingDoodle@3x.png
  10. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_MusicBox.imageset/ptp_style_MusicBox@2x.png
  11. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_MusicBox.imageset/ptp_style_MusicBox@3x.png
  12. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_PolaroidClay.imageset/ptp_style_PolaroidClay@2x.png
  13. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_PolaroidClay.imageset/ptp_style_PolaroidClay@3x.png
  14. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_VanGogh.imageset/ptp_style_VanGogh@2x.png
  15. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_VanGogh.imageset/ptp_style_VanGogh@3x.png
  16. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_Y2KMillennium.imageset/ptp_style_Y2KMillennium@2x.png
  17. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_Y2KMillennium.imageset/ptp_style_Y2KMillennium@3x.png
  18. 1 1
      AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstVC.swift
  19. 11 23
      AIEmoji/Business/TSPTPGeneratorVC/TSAIPhotoGeneratorBaseVC/TSAIPhotoBrowseVC.swift
  20. 6 6
      AIEmoji/Business/TSPTPGeneratorVC/TSGennertatorSelectStyleVC/TSGennertatorSelectStyleVC.swift
  21. 5 3
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPGeneratorVC/TSPTPGeneratorVC.swift
  22. 3 2
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift
  23. 2 7
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/View/TSImageGenerateView.swift
  24. 2 2
      AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/View/TSPTPSelectStyleView.swift
  25. 14 2
      AIEmoji/Business/TSSetingVC/SetingVC/TSSetingViewModel.swift
  26. 5 6
      AIEmoji/Business/VIewTool/TSGeneratorloadingView.swift
  27. 17 2
      AIEmoji/Common/Tool/OperationQueue/TSGenerateBaseOperation/TSGeneratePosterOperation.swift
  28. 2 2
      AIEmoji/Common/Tool/WindowHelper.swift
  29. 11 12
      AIEmoji/Res/photo_to_photo_style.json
  30. 45 0
      AIEmoji/de.lproj/Localizable.strings
  31. 45 0
      AIEmoji/en.lproj/Localizable.strings
  32. 44 0
      AIEmoji/es.lproj/Localizable.strings
  33. 44 0
      AIEmoji/ja.lproj/Localizable.strings
  34. 44 0
      AIEmoji/ko.lproj/Localizable.strings
  35. 44 0
      AIEmoji/pt-BR.lproj/Localizable.strings
  36. 43 0
      AIEmoji/pt-PT.lproj/Localizable.strings
  37. 44 0
      AIEmoji/zh-Hans.lproj/Localizable.strings
  38. 45 0
      AIEmoji/zh-Hant.lproj/Localizable.strings

+ 2 - 2
AIEmoji.xcodeproj/project.pbxproj

@@ -2416,7 +2416,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 7;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -2455,7 +2455,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 7;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;

+ 1 - 1
AIEmoji/Assets.xcassets/PTP/style/ptp_style_7.imageset/Contents.json

@@ -5,7 +5,7 @@
       "scale" : "1x"
     },
     {
-      "filename" : "ptp_style_7@2x.png",
+      "filename" : "ptp_style_7@2x 1.png",
       "idiom" : "universal",
       "scale" : "2x"
     },

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

@@ -33,7 +33,7 @@ class TSAILIstVC: TSBaseVC {
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
                     enterSelectPhotos(
-                        userDefaultsKey: "isFirstAIListQualityHintVC",
+                        userDefaultsKey: "",//"isFirstAIListQualityHintVC",
                         maxBitSize: kUploadImageMaxBit10Size,
                         config:.defaultConfig
                     ) { image in

+ 11 - 23
AIEmoji/Business/TSPTPGeneratorVC/TSAIPhotoGeneratorBaseVC/TSAIPhotoBrowseVC.swift

@@ -120,9 +120,6 @@ class TSAIPhotoBrowseVC: TSBaseVC {
     }
     
     override func dealThings() {
-        // 添加下拉手势
-//        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handleDismissPan(_:)))
-//        view.addGestureRecognizer(panGesture)
         addPullDownClosePage()
     }
     @objc func clickSubmitBtn(){
@@ -155,6 +152,17 @@ class TSAIPhotoBrowseVC: TSBaseVC {
                             debugPrint(error)
                         }
                     }
+                }else{//
+                    
+                    if let currentImage = self.currentImage {
+                        PhotoManagerShared.saveImageToAlbum(currentImage) { success, error in
+                            if success {
+                                kSaveSuccesswShared.show(atView: self.view)
+                            }else{
+                                debugPrint(error)
+                            }
+                        }
+                    }
                 }
                 
             }
@@ -173,26 +181,6 @@ class TSAIPhotoBrowseVC: TSBaseVC {
 
 
 extension TSAIPhotoBrowseVC {
-    // 手势处理方法
-//    @objc func handleDismissPan(_ gesture: UIPanGestureRecognizer) {
-//        let translation = gesture.translation(in: view)
-//        let progress = translation.y / view.bounds.height
-//        
-//        switch gesture.state {
-//        case .changed:
-//            view.transform = CGAffineTransform(translationX: 0, y: max(0, translation.y))
-//        case .ended:
-//            if progress > 0.5 || gesture.velocity(in: view).y > 1000 {
-//                dismiss(animated: true)
-//            } else {
-//                UIView.animate(withDuration: 0.3) {
-//                    self.view.transform = .identity
-//                }
-//            }
-//        default:
-//            break
-//        }
-//    }
     func reloadUI() {
 
     }

+ 6 - 6
AIEmoji/Business/TSPTPGeneratorVC/TSGennertatorSelectStyleVC/TSGennertatorSelectStyleVC.swift

@@ -37,11 +37,11 @@ class TSGennertatorSelectStyleVC: TSBaseVC {
     lazy var layout: UICollectionViewFlowLayout = {
         let w = (k_ScreenWidth-32.0-30.0-2.0)/4.0
         let layout = UICollectionViewFlowLayout()
-        layout.itemSize = CGSize(width: w, height: 110)
+        layout.itemSize = CGSize(width: w, height: 108)
         
         layout.scrollDirection = .vertical
         layout.minimumInteritemSpacing = 0.0
-        layout.minimumLineSpacing = 10.0
+        layout.minimumLineSpacing = 4.0
         layout.sectionInset = UIEdgeInsets(top: 0, left: 16, bottom: k_Height_safeAreaInsetsBottom(), right: 16)
         return layout
     }()
@@ -120,7 +120,6 @@ class TSGennertatorSelectStyleVC: TSBaseVC {
     }
     
     override func dealThings() {
-        addPullDownClosePage()
     }
 }
 
@@ -209,12 +208,13 @@ class TSGennertatorSelectStyleCell: TSBaseCollectionCell {
     }()
     
     lazy var textLabel: UILabel = {
-        let textLabel = UILabel.createLabel(font: .font(size: 11),textColor: .white.withAlphaComponent(0.8),textAlignment: .center,numberOfLines: 2)
+        let textLabel = UILabel.createLabel(font: .font(size: 12),textColor: .white.withAlphaComponent(0.8),textAlignment: .center,numberOfLines: 2)
         return textLabel
     }()
     
     override func creatUI() {
-        let w = contentView.width
+//        let w = contentView.width
+        let w = 78
         bgContentView.addSubview(boardImageView)
         boardImageView.snp.makeConstraints { make in
             make.top.centerX.equalToSuperview()
@@ -237,7 +237,7 @@ class TSGennertatorSelectStyleCell: TSBaseCollectionCell {
         
         bgContentView.addSubview(textLabel)
         textLabel.snp.makeConstraints { make in
-            make.top.equalTo(boardImageView.snp.bottom).offset(0)
+            make.top.equalTo(imageView.snp.bottom).offset(2)
             make.leading.trailing.bottom.equalToSuperview()
         }
     

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

@@ -122,10 +122,13 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
     //后台生成
     @objc func clickBackstageBtn() {
         self.operation.isSaveDB = true //后台生成,让数据库保存数据
-        
         if let model = infoModel {
             TSRMShared.ptpDBHistory.updateData(model)
-            NotificationCenter.default.post(name: .kPTPDataChanged, object: nil)
+            DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
+                NotificationCenter.default.post(name: .kPTPDataChanged, object: nil)
+            }
+        }else{
+            debugPrint("进入后台,但是没有新数据")
         }
 
         self.dismiss(animated: true, completion: nil)
@@ -167,7 +170,6 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
 //            guard let self = self else { return }
 //            self.upDateView(state: state, model: model)
 //        }.store(in: &cancellable)
-        
         creatImage()
     }
     

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

@@ -336,9 +336,10 @@ class TSPTPInputVC: TSBaseVC {
                 if state.isResult {//有结果,一定要刷新
                     updataCollectionView()
                 }else if self.isViewVisible == false {
-                    dePrint("TSBaseOperation 视图不可见")
+//                    dePrint("TSBaseOperation 视图不可见")
                     return
-                }else if state.reloadNewData {//主要是给pending用,让他再视图中有个位置占着
+                }else
+                if state.reloadNewData {//主要是给pending用,让他再视图中有个位置占着
                     updataCollectionView()
                 }
             }

+ 2 - 7
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/View/TSImageGenerateView.swift

@@ -113,16 +113,11 @@ class TSImageGenerateView:TSBaseView {
         }
         
         bgImageView.image = nil
-        if let image = UIImageView.retrieveImageInMemoryCache(urlString: bgImageURLString){
-            bgImageView.image = image//TSDynamicBlurView.blurred(image: image)
-            return
-        }
- 
-        UIImageView.downloadImageWithProgress(urlString: bgImageURLString) { [weak self] image in
+        bgImageView.setAsyncImage(urlString: bgImageURLString, completion:  { [weak self] image in
             guard let self = self else { return }
             if let image = image{
                 bgImageView.image = image//TSDynamicBlurView.blurred(image: image)
             }
-        }
+        })
     }
 }

+ 2 - 2
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/View/TSPTPSelectStyleView.swift

@@ -6,7 +6,7 @@
 //
 
 class TSPTPSelectStyleView : TSBaseView{
-    var viewH: CGFloat = 110.0
+    var viewH: CGFloat = 108.0
     var dataArray: [TSGenerateStyleModel] = [TSGenerateStyleModel](){
         didSet{
             styleCollectionView.reloadData()
@@ -24,7 +24,7 @@ class TSPTPSelectStyleView : TSBaseView{
         let layout = UICollectionViewFlowLayout()
         layout.scrollDirection = .horizontal
         let w = (k_ScreenWidth-32.0-30.0-2.0)/4.0
-        layout.itemSize = CGSize(width: w, height: 110)
+        layout.itemSize = CGSize(width: w, height: viewH)
         layout.minimumInteritemSpacing = 0.0
         layout.minimumLineSpacing = 10.0
         layout.sectionInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)

+ 14 - 2
AIEmoji/Business/TSSetingVC/SetingVC/TSSetingViewModel.swift

@@ -94,13 +94,25 @@ class TSSetingViewModel: ObservableObject {
     }
     
     func removeCloudData(parent: UIViewController) {
-        TSRMShared.textPtpDBHistory()
-        
         TSToastShared.showLoading(containerView: parent.view)
         kDelayOnMainThread(5) {
             TSToastShared.hideLoading()
             kSaveSuccesswShared.show(atView: parent.view,text: "Removed Successfully".localized,showViewBtn: false)
         }
+    
+#if DEBUG
+        
+//        guard let window = WindowHelper.getKeyWindow() else {
+//            debugPrint("getKeyWindow nil")
+//            return
+//        }
+//        let topY = k_Nav_Height+10
+//        debugPrint("topY=\(topY)")
+//        kSaveSuccesswShared.show(atView: window,text: "Successfully generated".localized,deadline: 5.0,bottom: kSaveSuccesswShared.getBottom(topY: topY)) {
+//        }
+//    
+//        TSRMShared.textPtpDBHistory()
+#endif
     }
     
     func AboutData(parent: UIViewController) {

+ 5 - 6
AIEmoji/Business/VIewTool/TSGeneratorloadingView.swift

@@ -46,12 +46,12 @@ class TSGeneratorloadingView: TSBaseView {
     }()
     
     lazy var textLabel: UILabel = {
-        let textLabel = UILabel.createLabel(font: .font(size: 18),textColor: .white,textAlignment: .center)
+        let textLabel = UILabel.createLabel(font: .font(size: 18),textColor: .white,textAlignment: .center,numberOfLines: 0)
         return textLabel
     }()
     
     lazy var infoLabel: UILabel = {
-        let textLabel = UILabel.createLabel(font: .font(size: 14),textColor: .white.withAlphaComponent(0.6),textAlignment: .center)
+        let textLabel = UILabel.createLabel(font: .font(size: 14),textColor: .white.withAlphaComponent(0.6),textAlignment: .center,numberOfLines: 0)
         return textLabel
     }()
     
@@ -99,19 +99,19 @@ class TSGeneratorloadingView: TSBaseView {
         blurEffect.snp.makeConstraints { make in
             make.edges.equalToSuperview()
         }
-        
+        let imageViewTop = 225
         contentView.addSubview(imageView)
         imageView.snp.makeConstraints { make in
             make.width.height.equalTo(200.0)
             make.centerX.equalToSuperview()
-            make.top.equalTo(250.0)
+            make.top.equalTo(imageViewTop)
         }
         
         contentView.addSubview(animatedImageView)
         animatedImageView.snp.makeConstraints { make in
             make.width.height.equalTo(200.0)
             make.centerX.equalToSuperview()
-            make.top.equalTo(250.0)
+            make.top.equalTo(imageViewTop)
         }
   
         contentView.addSubview(cusStackView)
@@ -136,7 +136,6 @@ class TSGeneratorloadingView: TSBaseView {
             make.top.equalTo(0)
             make.leading.equalTo(16)
             make.trailing.equalTo(-16)
-            make.height.equalTo(27)
             make.bottom.equalTo(-8)
         }
         

+ 17 - 2
AIEmoji/Common/Tool/OperationQueue/TSGenerateBaseOperation/TSGeneratePosterOperation.swift

@@ -65,14 +65,29 @@ class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
             return
         }
         
+        
+        guard let window = WindowHelper.getKeyWindow() else {
+            debugPrint("getKeyWindow nil")
+            return
+        }
+        
+        guard let rootVC = WindowHelper.topViewController() else {
+            debugPrint("handleGenerateSuccess topViewController nil")
+            return
+        }
+        
         let copyModel = self.currentActionInfoModel.copy()
-        if let rootVC = WindowHelper.getCurrentViewController() ,let cyModel = copyModel as? TSActionInfoModel {
-            kSaveSuccesswShared.show(atView: rootVC.view,text: "Successfully generated".localized,deadline: 5.0,bottom: kSaveSuccesswShared.getBottom(topY: k_Nav_Height+10)) {
+        if let cyModel = copyModel as? TSActionInfoModel {
+            let topY = k_Nav_Height+10
+            debugPrint("topY=\(topY)")
+            kSaveSuccesswShared.show(atView: window,text: "Successfully generated".localized,deadline: 5.0,bottom: kSaveSuccesswShared.getBottom(topY: topY)) {
                 let gennerateVC = TSPTPGeneratorVC(generateStyleModel: TSGenerateStyleModel(),infoModel: cyModel) { model in }
                 gennerateVC.modalPresentationStyle = .overFullScreen
                 gennerateVC.modalTransitionStyle = .crossDissolve
                 rootVC.present(gennerateVC, animated: true)
             }
+        }else{
+            debugPrint("copyModel as? TSActionInfoModel error")
         }
     }
     

+ 2 - 2
AIEmoji/Common/Tool/WindowHelper.swift

@@ -52,7 +52,7 @@ class WindowHelper {
         while let presentedViewController = currentViewController?.presentedViewController {
             currentViewController = presentedViewController
         }
-        
+        debugPrint("getCurrentViewController VC 是: \(currentViewController)")
         return currentViewController
     }
     
@@ -65,7 +65,7 @@ class WindowHelper {
         } else if let presented = base?.presentedViewController {
             return topViewController(base: presented)
         }
-        debugPrint("当前顶层 VC 是: \(base)")
+        debugPrint("当前顶层 VC 是: \(String(describing: base))")
         return base
     }
 }

+ 11 - 12
AIEmoji/Res/photo_to_photo_style.json

@@ -33,14 +33,22 @@
         "imageName": "ptp_style_Irasutoya",
         "imageText": "Irasutoya",
         "prompt":"用 irasutoya 风格绘制上传的照片,保留关键内容和构图,色彩丰富明亮",
-        "specialStyle":2,
+        "specialStyle":0,
         "isVip": true,
         "advance":true
     },{
         "imageName": "ptp_style_chibi",
         "imageText": "Chibi",
         "prompt":"Turn the uploaded photo into a chibi sticker set of 4 pictures,every sticker should not cover the other stickers",
-        "specialStyle":0,
+        "specialStyle":2,
+        "isVip": true,
+        "advance":true
+    },
+    {
+        "imageName": "ptp_style_PolaroidClay",
+        "imageText": "Polaroid Clay",
+        "prompt":"Q版人物形象,3D黏土风,是真实世界的光影,保留原始人物细节,包括服装和造型。整体放在一张拍立得照片中,有一只手握着拍立得相纸。图中角色从拍立得相纸中,突破边框,延伸进入现实世界的二维空间。背景延续拍立得中的背景,Q版风格,背景不需要再有人物出现,仅作为拍立得中背景的延展,与照片原始场景一致。拍立得底部文字是“Life Moment”。",
+        "specialStyle":2,
         "isVip": true,
         "advance":true
     },
@@ -72,7 +80,7 @@
         "imageName": "ptp_style_EarphoneCase",
         "imageText": "Earphone Case",
         "prompt":"请根据上传的照片生成AirPods充电盒手办,照片的人物探出AirPods充电盒,一只手扶着盒子边缘,一只手拿着咖啡杯(或者打招呼),营造可爱且俏皮的感觉。充电盒细节 :Apple AirPods充电盒设计,摆放角度为45度角摆放,让内部结构更清楚。内部摆放顺序: 照片中的人物,AirPods 耳机(只保留一个耳机,摆放于盒内)。整体风格要可爱3D盲盒风格,人物相似度高",
-        "specialStyle":0,
+        "specialStyle":2,
         "isVip": true,
         "advance":true
     },
@@ -135,15 +143,6 @@
         "isVip": true,
         "advance":true
     },
-    {
-        "imageName": "ptp_style_PolaroidClay",
-        "imageText": "Polaroid Clay",
-        "prompt":"Q版人物形象,3D黏土风,是真实世界的光影,保留原始人物细节,包括服装和造型。整体放在一张拍立得照片中,有一只手握着拍立得相纸。图中角色从拍立得相纸中,突破边框,延伸进入现实世界的二维空间。背景延续拍立得中的背景,Q版风格,背景不需要再有人物出现,仅作为拍立得中背景的延展,与照片原始场景一致。拍立得底部文字是“Life Moment”。",
-        "specialStyle":0,
-        "isVip": true,
-        "advance":true
-    },
-    
     {
         "imageName": "ptp_style_Watercolor",
         "imageText": "Watercolor",

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

@@ -242,3 +242,48 @@
 "Generation Failed" = "Build fehlgeschlagen";
 "This task has expired" = "Diese Aufgabe ist abgelaufen";
 "Generate in the background" = "Hintergrundgenerierung";
+
+"Felt" = "Filz";
+"Music Box" = "Spieldose";
+"Single Figurine" = "Einzelfigur";
+"Earphone Case" = "Ohrhörer";
+"Van Gogh" = "Van Gogh";
+"Animal Crossing" = "Animal Crossing";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "Dopamin";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "Scherenschnitt";
+"Healing Doodle" = "Farbkritzelei";
+"Polaroid Clay" = "Polaroid";
+"Watercolor" = "Aquarell";
+"Neon" = "Neon";
+"Black & White Anime" = "Einfaches Anime";
+"Crayon" = "Wachsstift";
+"Knit Doll" = "Stricken";
+"Handmade Papercraft" = "Papierkunst";
+"Print" = "Druck";
+"Monochrome Doodle" = "Kritzelei";
+"Anime Lite" = "Anime Lite";
+"Anime Pro" = "Anime-Profi";
+"Action Figure" = "Actionfigur";
+"Cute Dog" = "Snoopy";
+"Cute Cat" = "Hello Kitty";
+"Irasutoya" = "Irasutoya";
+"Pop Art" = "Pop-Art";
+
+"Fantasy Illustration" = "Illustration";
+"Retro Anime" = "Retro-Anime";
+"Classical Painting" = "Ölgemälde";
+"Cyberpunk" = "Cyberpunk";
+"Photorealism" = "Fotorealismus";
+"Modern Digital Art" = "Kunst";
+"Sketch" = "Skizze";
+"Claymation" = "Knetanimation";
+"Pixel" = "Pixel";
+"3D" = "Pixar";
+"Toy" = "Lego";
+"Disney" = "Disney";
+"Ukiyoe" = "Ukiyo-e";
+"Chibi" = "Chibi";
+"Photo Enhancer" = "Foto-Enhancer";
+"Successfully generated" = "Erfolgreich generiert";

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

@@ -239,3 +239,48 @@
 "Generation Failed" = "Generation Failed";
 "This task has expired" = "This task has expired";
 "Generate in the background" = "Generate in the background";
+
+"Felt" = "Felt";
+"Music Box" = "Music Box";
+"Single Figurine" = "Single Figurine";
+"Earphone Case" = "Earphone";
+"Van Gogh" = "Van Gogh";
+"Animal Crossing" = "Animal Crossing";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "Dopamine";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "Paper Cut";
+"Healing Doodle" = "Color Doodle";
+"Polaroid Clay" = "Polaroid";
+"Watercolor" = "Watercolor";
+"Neon" = "Neon";
+"Black & White Anime" = "Simple Anime";
+"Crayon" = "Crayon";
+"Knit Doll" = "Knit";
+"Handmade Papercraft" = "Papercraft";
+"Print" = "Print";
+"Monochrome Doodle" = "Doodle";
+"Anime Lite" = "Anime Lite";
+"Anime Pro" = "Anime Pro";
+"Action Figure" = "Action Figure";
+"Cute Dog" = "Cute Dog";
+"Cute Cat" = "Cute Cat";
+"Irasutoya" = "Irasutoya";
+"Pop Art" = "Pop Art";
+
+"Fantasy Illustration" = "Illustration";
+"Retro Anime" = "Retro Anime";
+"Classical Painting" = "Oil Painting";
+"Cyberpunk" = "Cyberpunk";
+"Photorealism" = "Photorealism";
+"Modern Digital Art" = "Art";
+"Sketch" = "Sketch";
+"Claymation" = "Claymation";
+"Pixel" = "Pixel";
+"3D" = "3D";
+"Toy" = "Toy";
+"Disney" = "Cute";
+"Ukiyoe" = "Ukiyoe";
+"Chibi" = "Chibi";
+"Photo Enhancer" = "Photo Enhancer";
+"Successfully generated" = "Successfully generated";

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

@@ -240,3 +240,47 @@
 "Generate in the background" = "Generación de fondo";
 
 
+"Felt" = "Fieltro";
+"Music Box" = "Caja de Música";
+"Single Figurine" = "Figura Individual";
+"Earphone Case" = "Auriculares";
+"Van Gogh" = "Van Gogh";
+"Animal Crossing" = "Animal Crossing";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "Dopamina";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "Recorte de Papel";
+"Healing Doodle" = "Dibujo a Color";
+"Polaroid Clay" = "Polaroid";
+"Watercolor" = "Acuarela";
+"Neon" = "Neón";
+"Black & White Anime" = "Anime Simple";
+"Crayon" = "Crayón";
+"Knit Doll" = "Tejido";
+"Handmade Papercraft" = "Arte en Papel";
+"Print" = "Impresión";
+"Monochrome Doodle" = "Garabato";
+"Anime Lite" = "Anime ligero";
+"Anime Pro" = "Anime Pro";
+"Action Figure" = "Figura de Acción";
+"Cute Dog" = "Snoopy";
+"Cute Cat" = "Hello Kitty";
+"Irasutoya" = "Irasutoya";
+"Pop Art" = "Arte pop";
+
+"Fantasy Illustration" = "Ilustración";
+"Retro Anime" = "Anime Retro";
+"Classical Painting" = "Pintura al Óleo";
+"Cyberpunk" = "Cyberpunk";
+"Photorealism" = "Fotorrealismo";
+"Modern Digital Art" = "Arte";
+"Sketch" = "Boceto";
+"Claymation" = "Plastilina";
+"Pixel" = "Pixel";
+"3D" = "Pixar";
+"Toy" = "Lego";
+"Disney" = "Disney";
+"Ukiyoe" = "Ukiyo-e";
+"Chibi" = "Chibi";
+"Photo Enhancer" = "Mejorador de fotos";
+"Successfully generated" = "Generado con éxito";

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

@@ -239,3 +239,47 @@
 "This task has expired" = "このタスクは終了しました";
 "Generate in the background" = "バックグラウンド生成";
 
+"Felt" = "フェルト";
+"Music Box" = "オルゴール";
+"Single Figurine" = "単体フィギュア";
+"Earphone Case" = "イヤホン";
+"Van Gogh" = "ゴッホ";
+"Animal Crossing" = "どうぶつの森";
+"Chiikawa" = "ちいかわ";
+"Dopamine" = "ドーパミン";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "切り絵";
+"Healing Doodle" = "カラークリップ";
+"Polaroid Clay" = "ポラロイド";
+"Watercolor" = "水彩";
+"Neon" = "ネオン";
+"Black & White Anime" = "シンプルアニメ";
+"Crayon" = "クレヨン";
+"Knit Doll" = "ニット";
+"Handmade Papercraft" = "ペーパークラフト";
+"Print" = "印刷";
+"Monochrome Doodle" = "落書き";
+"Anime Lite" = "アニメライト";
+"Anime Pro" = "アニメプロ";
+"Action Figure" = "かわいい人形";
+"Cute Dog" = "スヌーピー";
+"Cute Cat" = "ハローキティ";
+"Irasutoya" = "いらすとや";
+"Pop Art" = "ポップアート";
+
+"Fantasy Illustration" = "イラスト";
+"Retro Anime" = "レトロアニメ";
+"Classical Painting" = "油絵";
+"Cyberpunk" = "サイバーパンク";
+"Photorealism" = "フォトリアリズム";
+"Modern Digital Art" = "アート";
+"Sketch" = "スケッチ";
+"Claymation" = "クレイアニメ";
+"Pixel" = "ピクセル";
+"3D" = "ピクサー";
+"Toy" = "レゴ";
+"Disney" = "ディズニー";
+"Ukiyoe" = "浮世絵";
+"Chibi" = "ちび";
+"Photo Enhancer" = "フォトエンハンサー";
+"Successfully generated" = "正常に生成されました";

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

@@ -245,3 +245,47 @@
 "Generate in the background" = "배경 생성";
 
 
+"Felt" = "펠트";
+"Music Box" = "뮤직 박스";
+"Single Figurine" = "단독 피규어";
+"Earphone Case" = "이어폰";
+"Van Gogh" = "반 고흐";
+"Animal Crossing" = "동물의 숲";
+"Chiikawa" = "치이카와";
+"Dopamine" = "도파민";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "종이 오리기";
+"Healing Doodle" = "컬러 낙서";
+"Polaroid Clay" = "폴라로이드";
+"Watercolor" = "수채화";
+"Neon" = "네온";
+"Black & White Anime" = "심플 애니";
+"Crayon" = "크레용";
+"Knit Doll" = "니트";
+"Handmade Papercraft" = "종이 공예";
+"Print" = "인쇄";
+"Monochrome Doodle" = "낙서";
+"Anime Lite" = "애니메 라이트";
+"Anime Pro" = "애니메이션 프로";
+"Action Figure" = "액션 피규어";
+"Cute Dog" = "귀여운 강아지";
+"Cute Cat" = "Hello Kitty";
+"Irasutoya" = "이라수토야";
+"Pop Art" = "팝아트";
+
+"Fantasy Illustration" = "일러스트";
+"Retro Anime" = "레트로 애니";
+"Classical Painting" = "유화";
+"Cyberpunk" = "사이버펑크";
+"Photorealism" = "사실적 묘사";
+"Modern Digital Art" = "미술";
+"Sketch" = "스케치";
+"Claymation" = "점토화";
+"Pixel" = "픽셀";
+"3D" = "픽사";
+"Toy" = "레고";
+"Disney" = "디즈니";
+"Ukiyoe" = "우키요에";
+"Chibi" = "치비";
+"Photo Enhancer" = "사진 향상제";
+"Successfully generated" = "성공적으로 생성됨";

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

@@ -239,3 +239,47 @@
 "This task has expired" = "Esta tarefa expirou";
 "Generate in the background" = "Geração de plano de fundo";
 
+"Felt" = "Feltro";
+"Music Box" = "Caixa de Música";
+"Single Figurine" = "Boneco Individual";
+"Earphone Case" = "Fone de Ouvido";
+"Van Gogh" = "Van Gogh";
+"Animal Crossing" = "Animal Crossing";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "Dopamina";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "Recorte de Papel";
+"Healing Doodle" = "Rabisco Colorido";
+"Polaroid Clay" = "Polaroid";
+"Watercolor" = "Aquarela";
+"Neon" = "Neon";
+"Black & White Anime" = "Anime Simples";
+"Crayon" = "Giz de Cera";
+"Knit Doll" = "Tricô";
+"Handmade Papercraft" = "Arte em Papel";
+"Print" = "Impressão";
+"Monochrome Doodle" = "Rabisco";
+"Anime Lite" = "Anime Lite";
+"Anime Pro" = "Anime Pro";
+"Action Figure" = "Boneco de Ação";
+"Cute Dog" = "Snoopy";
+"Cute Cat" = "Hello Kitty";
+"Irasutoya" = "Irasutoya";
+"Pop Art" = "Arte pop";
+
+"Fantasy Illustration" = "Ilustração";
+"Retro Anime" = "Anime Retrô";
+"Classical Painting" = "Pintura a Óleo";
+"Cyberpunk" = "Cyberpunk";
+"Photorealism" = "Realismo";
+"Modern Digital Art" = "Arte";
+"Sketch" = "Esboço";
+"Claymation" = "Claymation";
+"Pixel" = "Pixel";
+"3D" = "Pixar";
+"Toy" = "Lego";
+"Disney" = "Disney";
+"Ukiyoe" = "Ukiyo-e";
+"Chibi" = "Chibi";
+"Photo Enhancer" = "Melhorador de fotos";
+"Successfully generated" = "Gerado com sucesso";

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

@@ -239,4 +239,47 @@
 "This task has expired" = "Esta tarefa expirou";
 "Generate in the background" = "Geração de plano de fundo";
 
+"Felt" = "Feltro";
+"Music Box" = "Caixa de Música";
+"Single Figurine" = "Boneco Individual";
+"Earphone Case" = "Fone de Ouvido";
+"Van Gogh" = "Van Gogh";
+"Animal Crossing" = "Animal Crossing";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "Dopamina";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "Recorte de Papel";
+"Healing Doodle" = "Rabisco Colorido";
+"Polaroid Clay" = "Polaroid";
+"Watercolor" = "Aquarela";
+"Neon" = "Neon";
+"Black & White Anime" = "Anime Simples";
+"Crayon" = "Giz de Cera";
+"Knit Doll" = "Tricô";
+"Handmade Papercraft" = "Arte em Papel";
+"Print" = "Impressão";
+"Monochrome Doodle" = "Rabisco";
+"Anime Lite" = "Anime Lite";
+"Anime Pro" = "Anime Pro";
+"Action Figure" = "Boneco de Ação";
+"Cute Dog" = "Snoopy";
+"Cute Cat" = "Hello Kitty";
+"Irasutoya" = "Irasutoya";
+"Pop Art" = "Arte pop";
 
+"Fantasy Illustration" = "Ilustração";
+"Retro Anime" = "Anime Retrô";
+"Classical Painting" = "Pintura a Óleo";
+"Cyberpunk" = "Cyberpunk";
+"Photorealism" = "Realismo";
+"Modern Digital Art" = "Arte";
+"Sketch" = "Esboço";
+"Claymation" = "Claymation";
+"Pixel" = "Pixel";
+"3D" = "Pixar";
+"Toy" = "Lego";
+"Disney" = "Disney";
+"Ukiyoe" = "Ukiyo-e";
+"Chibi" = "Chibi";
+"Photo Enhancer" = "Melhorador de fotos";
+"Successfully generated" = "Gerado com sucesso";

+ 44 - 0
AIEmoji/zh-Hans.lproj/Localizable.strings

@@ -240,3 +240,47 @@
 "Generate in the background" = "后台生成";
 
 
+"Felt" = "毛毡风";
+"Music Box" = "音乐盒";
+"Single Figurine" = "单人手办";
+"Earphone Case" = "耳机手办";
+"Van Gogh" = "梵高";
+"Animal Crossing" = "动森";
+"Chiikawa" = "Chiikawa";
+"Dopamine" = "多巴胺";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "剪纸";
+"Healing Doodle" = "彩色简笔";
+"Polaroid Clay" = "拍立得";
+"Watercolor" = "水彩";
+"Neon" = "霓虹灯";
+"Black & White Anime" = "简约日漫";
+"Crayon" = "蜡笔";
+"Knit Doll" = "针织";
+"Handmade Papercraft" = "手工纸艺";
+"Print" = "印刷";
+"Monochrome Doodle" = "简笔";
+"Anime Lite" = "动漫精简版";
+"Anime Pro" = "动漫增强版";
+"Action Figure" = "玩偶套盒";
+"Cute Dog" = "史努比";
+"Cute Cat" = "凯蒂猫";
+"Irasutoya" = "插画小人";
+"Pop Art" = "波普艺术";
+
+"Fantasy Illustration" = "精美插画";
+"Retro Anime" = "复古动漫";
+"Classical Painting" = "古典油画";
+"Cyberpunk" = "赛博朋克";
+"Photorealism" = "写实";
+"Modern Digital Art" = "艺术";
+"Sketch" = "素描";
+"Claymation" = "粘土";
+"Pixel" = "像素";
+"3D" = "皮克斯";
+"Toy" = "乐高";
+"Disney" = "迪士尼";
+"Ukiyoe" = "浮世绘";
+"Chibi" = "Q版";
+"Photo Enhancer" = "图片增强";
+"Successfully generated" = "生成成功";

+ 45 - 0
AIEmoji/zh-Hant.lproj/Localizable.strings

@@ -230,3 +230,48 @@
 "Generation Failed" = "生成失敗";
 "This task has expired" = "此任務已過期";
 "Generate in the background" = "後台生成";
+
+"Felt" = "毛氈";
+"Music Box" = "音樂盒";
+"Single Figurine" = "單人手辦";
+"Earphone Case" = "耳機";
+"Van Gogh" = "梵高";
+"Animal Crossing" = "動物森友會";
+"Chiikawa" = "吉伊卡哇";
+"Dopamine" = "多巴胺";
+"Y2K Millennium" = "Y2K";
+"Chinese Paper-Cut" = "剪紙";
+"Healing Doodle" = "彩色簡筆";
+"Polaroid Clay" = "拍立得";
+"Watercolor" = "水彩";
+"Neon" = "霓虹";
+"Black & White Anime" = "簡約日漫";
+"Crayon" = "蠟筆";
+"Knit Doll" = "針織";
+"Handmade Papercraft" = "紙藝";
+"Print" = "印刷";
+"Monochrome Doodle" = "塗鴉";
+"Anime Lite" = "動漫精簡版";
+"Anime Pro" = "動漫增強版";
+"Action Figure" = "可愛玩偶";
+"Cute Dog" = "史努比";
+"Cute Cat" = "凱蒂貓";
+"Irasutoya" = "插畫小人";
+"Pop Art" = "波普藝術";
+
+"Fantasy Illustration" = "插畫";
+"Retro Anime" = "復古動漫";
+"Classical Painting" = "油畫";
+"Cyberpunk" = "賽博朋克";
+"Photorealism" = "寫實";
+"Modern Digital Art" = "藝術";
+"Sketch" = "素描";
+"Claymation" = "黏土";
+"Pixel" = "像素";
+"3D" = "皮克斯";
+"Toy" = "樂高";
+"Disney" = "迪士尼";
+"Ukiyoe" = "浮世繪";
+"Chibi" = "Q版";
+"Photo Enhancer" = "照片增強";
+"Successfully generated" = "生成成功";