| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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]}")
|