rambo 1 mesiac pred
rodič
commit
869e4f926b

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 18 - 0
python/canvas_json.json


+ 4 - 1
python/config.ini

@@ -47,4 +47,7 @@ stop = 9
 ; low_iso = 100
 ; high_iso = 6400
 [output_config]
-output_dir = ..\..\..\output\
+output_dir = ..\..\..\output\
+
+[customer_template]
+template_url = http://localhost:3001

+ 13 - 13
python/detail_template_test_xinnuo.json

@@ -8,21 +8,21 @@
                 "编号": "AC51016112",
                 "颜色名称": "枪色",
                 "pics": {
-                   "俯视-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_抠图.png",
+                   "俯视": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_抠图.png",
                 "俯视-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_阴影.png",
-                "侧视-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_抠图.png",
+                "侧视": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_抠图.png",
                 "侧视-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_阴影.png",
-                "后跟-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_抠图.png",
+                "后跟": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_抠图.png",
                 "后跟-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_阴影.png",
-                "鞋底-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_抠图.png",
+                "鞋底": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_抠图.png",
                 "鞋底-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_阴影.png",
-                "内里-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_抠图.png",
+                "内里": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_抠图.png",
                 "内里-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_阴影.png",
-                "组合-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(6)_组合_抠图.png",
+                "组合": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(6)_组合_抠图.png",
                 "组合-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(6)_组合_阴影.png",
-                "组合2-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(7)_组合2_抠图.png",
+                "组合2": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(7)_组合2_抠图.png",
                 "组合2-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(7)_组合2_阴影.png",
-                "组合3-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(8)_组合3_抠图.png",
+                "组合3": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(8)_组合3_抠图.png",
                 "组合3-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(8)_组合3_阴影.png"
                 },
                 "800x800": [
@@ -39,15 +39,15 @@
                 "编号": "AC51209131",
                 "颜色名称": "白色",
                 "pics": {
-                    "俯视-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_抠图.png",
+                    "俯视": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_抠图.png",
                     "俯视-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(1)_俯视_阴影.png",
-                    "侧视-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_抠图.png",
+                    "侧视": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_抠图.png",
                     "侧视-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(2)_侧视_阴影.png",
-                    "后跟-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_抠图.png",
+                    "后跟": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_抠图.png",
                     "后跟-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(3)_后跟_阴影.png",
-                    "鞋底-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_抠图.png",
+                    "鞋底": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_抠图.png",
                     "鞋底-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(4)_鞋底_阴影.png",
-                    "内里-抠图": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_抠图.png",
+                    "内里": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_抠图.png",
                     "内里-阴影": "C:/Users/15001/Desktop/2025-06-11/A333/阴影图处理/A333(5)_内里_阴影.png"
                 },
                 "800x800": [

+ 99 - 0
python/service/customer_template_service.py

@@ -0,0 +1,99 @@
+from email.policy import default
+from settings import *
+from middleware import UnicornException
+import copy
+import requests
+from PIL import Image
+from io import BytesIO
+import base64
+generate_templace = "/generate"
+# CUSTOMER_TEMPLATE_URL
+class CustomerTemplateService:
+    def __init__(self):
+        pass
+    def generateTemplate(self,config_data,template_json):
+        '''
+        参数:
+        config_data: 配置数据
+        template_json: 模板数据
+        '''
+        print("开始生成模板")
+        # print("config_data",config_data)
+        handler_config_data = self.__handler_config_data(config_data)
+        print("handler_config_data",handler_config_data)
+        headers = {"Content-Type": "application/json"}
+        json_data = {"goodsList":handler_config_data,"canvasList":template_json}
+        json_data = json.dumps(json_data,ensure_ascii=False)
+        # print("json_data",json_data)
+        template_result = requests.post(CUSTOMER_TEMPLATE_URL+generate_templace,data=json_data,headers=headers)
+        resultJson = template_result.json()
+        code = resultJson.get("code")
+        msg = resultJson.get("msg")
+        images = resultJson.get("images",[])
+        if code != 0:
+            raise UnicornException(f"详情页生成失败,请检查模板数据是否正确:{msg}")
+        for image in images:
+            canvasIndex = image.get("canvasIndex")
+            dataUrl = image.get("dataUrl")
+            path = r"C:/Development/project/output/2025-12-05/详情图-测试"
+            save_name = f"{path}/切片图-自定义-1/{int(canvasIndex)+1}.png"
+            match dataUrl:
+                case "model":
+                    # 复制模特图进行拼接
+                    pass
+                case "scene":
+                    # 复制场景图进行拼接
+                    pass
+                case _:
+                    self.save_base64_image(dataUrl,save_name)
+        print("模板生成成功")
+    def __handler_config_data(self,config_data):
+        '''
+        处理配置数据,返回一个新的数据对象
+        '''
+        # 深拷贝原始数据,确保不改变原数据对象
+        new_config_data = copy.deepcopy(config_data)
+        
+        # 如果输入是字典,则将其转换为目标结构
+        if isinstance(new_config_data, dict):
+            result = []
+            for key, item in new_config_data.items():
+                # 提取需要添加的数据
+                additional_data = {k: v for k, v in item.items() if k not in ["款号", "货号资料"]}
+                
+                # 遍历货号资料,将额外数据添加到每个货号对象中
+                for product in item.get("货号资料", []):
+                    product.update(additional_data)
+                
+                # 构建目标结构
+                result.append({key: item})
+            return result
+        
+        return new_config_data
+    def save_base64_image(self,base64_data, output_path):
+        """
+        将 Base64 编码的图像保存到本地文件
+
+        参数:
+        - base64_data: str,Base64 编码的图像数据(不包含前缀如 "data:image/png;base64,")
+        - output_path: str,保存图像的本地路径
+        """
+        if "data:image/jpeg;base64," in base64_data:
+            base64_data = base64_data.split(",")[1]
+        try:
+            # 1. 解码 Base64 数据
+            image_data = base64.b64decode(base64_data)
+            
+            # 2. 加载图像数据
+            image = Image.open(BytesIO(image_data))
+            # 3. 检查路径是否存在,如果不存在则创建
+            directory = os.path.dirname(output_path)
+            if directory and not os.path.exists(directory):
+                os.makedirs(directory)
+                print(f"目录已创建: {directory}")
+            # 4. 保存图像到本地
+            image.save(output_path)
+            print(f"图像已成功保存到 {output_path}")
+        except Exception as e:
+            print(f"保存图像失败: {e}")
+            print(f"Base64 数据前 100 字符: {base64_data[:100]}")

+ 3 - 0
python/settings.py

@@ -328,3 +328,6 @@ print("OUTPUT_DIR",__output_dir,OUTPUT_DIR)
 def handle_remove_readonly(func, path, exc):
     os.chmod(path, stat.S_IWRITE)
     func(path)
+
+
+CUSTOMER_TEMPLATE_URL = config.get("customer_template", "template_url")

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
python/temp.py


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov