Browse Source

```
feat(detail-template): 新增小苏说鞋详情模板插件

新增小苏说鞋第七版详情模板插件,包含完整的详情页生成功能,
支持多角度图片拼接、文字排版和设计元素处理。

fix(detail-generate-base): 修复图片移动过程中的异常处理

在移动主图到输出目录时添加异常捕获机制,避免因文件操作
失败导致程序中断的问题。

chore(test): 更新测试配置以支持小苏说鞋模板

修改测试文件路径和数据源,将原有的青羊驿站模板测试切换为
小苏说鞋模板测试,并更新相应的测试数据文件。
```

rambo 6 ngày trước cách đây
mục cha
commit
08e09107ce

+ 453 - 0
python/custom_plugins/plugins/detail_template/xiaosushuoxie/detail_xiaosushuoxie7.py

@@ -0,0 +1,453 @@
+"""
+步骤:
+1、整理需要处理的款号图-输出款号图文件夹
+2、整理所有相关的图片作为素材图
+3、按要求进行拼接
+"""
+import os
+import settings
+
+from PIL import ImageFont
+# from module.view_control.generate_goods_no_detail_pic.detail_generate_base import DetailBase
+# from module.view_control.generate_goods_no_detail_pic.pic_deal import PictureProcessing
+try:
+    is_test_plugins = settings.is_test_plugins
+except:
+    is_test_plugins = False
+
+if is_test_plugins:
+    from custom_plugins.plugins_mode.detail_generate_base import DetailBase
+    from custom_plugins.plugins_mode.pic_deal import PictureProcessing
+else:
+    from plugins_mode.detail_generate_base import DetailBase
+    from plugins_mode.pic_deal import PictureProcessing
+from PIL import Image, ImageDraw
+
+
+plugins_name = "详情模板"
+company_name_list = ["小苏"]
+template_name = "xiaosushuoxie-7"
+
+
+class DetailPicGet(DetailBase):
+    need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
+    root = r"{}\resources\detail_temp\xiaosushuoxie\7".format(os.getcwd())
+
+    def __init__(self, goods_no, goods_no_value: dict, out_put_dir, windows=None, test=False,excel_data=None,assigned_page_list=None):
+        super().__init__(goods_no, goods_no_value, out_put_dir, windows=windows,excel_data=excel_data,assigned_page_list=assigned_page_list)
+        self.root = r"{}\resources\detail_temp\xiaosushuoxie\7".format(os.getcwd())
+        self.template_name = template_name
+        self.base_bg_color = (236, 226, 211)
+        self.white_bg_color = (255, 255, 255)
+        self.deal_pic_func_list = [
+            self.deal_pic_1,
+            # self.deal_pic_2,
+            # self.deal_pic_3,
+            # self.deal_pic_4,
+            # self.deal_pic_5,
+        ]
+
+        if test:
+            self.run_test()
+        else:
+            self.run_all()
+
+
+    def run_test(self):
+        detailed_images = []
+        detailed_images.append(self.deal_pic_1())
+        # detailed_images.append(self.deal_pic_2())
+        # detailed_images.append(self.deal_pic_3())
+        # detailed_images.append(self.deal_pic_4())
+        # detailed_images.append(self.deal_pic_5())
+        img = self.add_pic(detailed_images)
+        img.save(r"{}/{}.jpg".format(self.out_put_dir,self.goods_no, format="JPEG"))
+
+    def deal_pic_1(self):
+        """   制作主图  """
+        detailed_images = []
+        pp_bg = PictureProcessing(r"{}\template_1.jpg".format(self.root))
+        # -------粘贴文字-------
+        mainTitle = self.get_text_value("主标题")
+        subTitle = self.get_text_value("副标题")
+        signTitle = self.get_text_value("签名")
+        fontMain = ImageFont.truetype(r"resources\ttf\DOUYINSANSBOLD.ttf", 240)
+        fontSub = ImageFont.truetype(r"resources\ttf\puhui\Regular.ttf", 40)
+        fontSign = ImageFont.truetype(r"resources\ttf\puhui\en\Bold.otf", 40)
+        main_text_bg = PictureProcessing("RGBA", (pp_bg.width, 500), (255, 255, 255,0))
+        main_text_bg = main_text_bg.get_text_image_advanced(
+                value=(0, 0),
+                font=fontMain,
+                text=mainTitle,
+                align="center",
+                fill=self.white_bg_color,
+                spacing=5,
+                return_mode="min_image",
+            )
+        # 副标题
+        sub_text_bg = PictureProcessing("RGBA", (pp_bg.width, 500), (255, 255, 255,0))
+        sub_text_bg = sub_text_bg.get_text_image_advanced(
+                value=(0, 0),
+                font=fontSub,
+                text=subTitle,
+                align="center",
+                fill=self.white_bg_color,
+                spacing=5,
+                return_mode="min_image",
+            )
+        # 签名
+        sign_text_bg = PictureProcessing("RGBA", (pp_bg.width, 500), (255, 255, 255,0))
+        sign_text_bg = sign_text_bg.get_text_image_advanced(
+                value=(0, 0),
+                font=fontSign,
+                text=signTitle,
+                align="center",
+                fill=self.white_bg_color,
+                spacing=5,
+                return_mode="min_image",
+            )
+        pp_bg = pp_bg.paste_img(top_img=main_text_bg,value=(0,208),base='nc')
+        pp_bg = pp_bg.paste_img(top_img=sub_text_bg,value=(0,470),base='nc')
+        pp_bg = pp_bg.paste_img(top_img=sign_text_bg,value=(0,57),base='nc')
+        detailed_images.append(pp_bg)
+        return PictureProcessing(im=self.add_pic(detailed_images))
+
+    def deal_pic_2(self):
+        """
+        细节解析
+        """
+        # 文字排列
+        detailed_images = []
+        pp_bg = PictureProcessing(
+            r"{}\template_2.png".format(
+                self.root
+            )
+        )
+        detailed_images.append(pp_bg)
+
+
+        goods_art_no_list = list(self.data.keys())
+
+        pp_1 = self.get_overlay_pic_from_dict(
+            goods_art_no=goods_art_no_list[0],
+            color_name="侧视",
+            bg_color=self.base_bg_color,
+        )
+        pp_1= pp_1.resize(value=pp_bg.width / 1.4)
+        pp_1= pp_1.paste_img_invert(top_img=PictureProcessing("RGB", (pp_bg.width, pp_1.height + 40), self.base_bg_color),
+                                    base="cc"
+                                    )
+        detailed_images.append(pp_1)
+
+        pp_bg_bottom = PictureProcessing(r"{}\template_2_1.png".format(self.root))
+        detailed_images.append(pp_bg_bottom)
+        return PictureProcessing(im=self.add_pic(detailed_images))
+
+    def deal_pic_3(self):
+        """   各个颜色细节展示  """
+        detailed_images = []
+        pp_bg = PictureProcessing(
+            r"{}\template_3.png".format(
+                self.root
+            )
+        )
+        detailed_images.append(pp_bg)
+
+
+        # ----------主图放置
+        y = 120
+        pp_list_1 = []
+        font = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 25)
+        goods_art_no_list = list(self.data.keys())
+
+        all_color_name = []
+        for index, goods_art_no in enumerate(goods_art_no_list):
+            pp_jpg = self.get_overlay_pic_from_dict(
+                goods_art_no=goods_art_no,
+                color_name="侧视",
+                bg_color=self.base_bg_color,
+            )
+            if pp_jpg is None:
+                continue
+            pp_jpg = pp_jpg.resize(value=440)
+            color_name = self.goods_no_value["货号资料"][index]["颜色名称"]
+            all_color_name.append(color_name)
+            text_bg = PictureProcessing("RGB", (440, 200), (255, 255, 255))
+            text_bg = text_bg.get_text_image_advanced(
+                value=(220, 10),
+                font=font,
+                text="【{}】".format(color_name),
+                align="center",
+                anchor="mm",
+                spacing=5,
+                fill=(55, 55, 55),
+                return_mode="min_image_high",
+                margins=(10, 5, 0, 0)
+            )
+            # text_bg.show()
+            _bg = PictureProcessing("RGB", (440, pp_jpg.height+text_bg.height), (255, 255, 255))
+            _bg = _bg.paste_img(top_img=pp_jpg)
+            _bg = _bg.paste_img(top_img=text_bg,value=(0,pp_jpg.height))
+            pp_list_1.append(_bg)
+
+        rows = 2
+        shoes_bg = PictureProcessing().horizontal_distribution(
+            pp_list=pp_list_1,
+            bg_width=1200,
+            margins=(0, 0, 40, 40),
+            line_spacing=60,
+            number_per_row=rows,
+        )
+        detailed_images.append(shoes_bg)
+
+
+        font_bg = PictureProcessing(r"{}\template_3_1_new.png".format(self.root))
+        font = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 30)
+        base_x = pp_bg.width - 229
+        base_y = 205
+
+        text_list = [
+            ("-{}".format("-".join(all_color_name)), (base_x, base_y)),
+            ("-{}".format(self.get_text_value("鞋面材质")), (base_x, base_y+70*1)),
+            ("-{}".format(self.get_text_value("内里材质")), (base_x, base_y+70*2)),
+            ("-{}".format(self.get_text_value("鞋底材质")), (base_x, base_y+70*3)),
+            ("-{}".format(self.get_text_value("鞋垫材质")), (base_x, base_y+70*4 )),
+            ("-{}".format(self.get_text_value("跟高")), (base_x, base_y+70*5)),
+            ("-{}".format(self.get_text_value("尺码")), (base_x, base_y+70*6)),
+        ]
+        for text_item in text_list:
+            position = text_item[1]
+            text_str = text_item[0]
+            xPos = position[0]
+            for char in reversed(text_str):
+                font_bg.add_text(
+                    mode="pixel",
+                    value=(xPos, position[1]),
+                    font=font,
+                    text=char,
+                    align="right",
+                    anchor="mm",
+                    spacing=10,
+                    fill=(30, 30, 30),
+                )
+                if not "\u4e00" <= char <= "\u9fff":
+                    xPos -= 20
+                else:
+                    xPos -= 35
+        # 其他图片
+        detailed_images.append(font_bg)
+        return PictureProcessing(im=self.add_pic(detailed_images))
+
+    def deal_pic_4(self):
+        # =============设计理念================
+        detail_images = []
+        top_bg = PictureProcessing(r"{}\template_4.png".format(self.root))
+        detail_images.append(top_bg)
+
+        font_1 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 40)
+        # 粘贴文字
+        text = self.get_text_value("设计理念")
+        if not text:
+            text = "引领全新裸足脚感,开启自信步履亲肤\n优质鞋面材质赋予全新舒适脚感\n多元场景穿搭,满足你的不同STYLE"
+        _, text_height = self.get_font_render_size(text, font_1)
+        text_bg = PictureProcessing(
+            "RGB",
+            (
+                top_bg.width,
+                text_height + 350,
+            ),
+            (236, 227, 212),
+        )
+        goods_art_no_list = list(self.data.keys())
+        # y = 430
+
+        x = top_bg.width / 2
+        text_bg = text_bg.add_text(
+            mode="pixel",
+            value=(x, int(text_bg.height / 2) - 60),
+            font=font_1,
+            text=text,
+            align="center",
+            anchor="mm",
+            spacing=15,
+            fill=(97, 97, 98),
+        )
+        detail_images.append(text_bg)
+
+        # ==========3个提示信息=========
+        title_font = ImageFont.truetype(r"resources\ttf\puhui\Heavy.ttf", 60)
+        sub_title_font = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 30)
+        desc_font = ImageFont.truetype(r"resources\ttf\puhui\Heavy.ttf", 35)
+        color_name_list = ["俯视", "内里", "侧视"]
+        # 添加分割线
+        detail_images.append(PictureProcessing("RGB", (top_bg.width, 100), (255, 255, 255)))
+
+        for index, color_name in enumerate(color_name_list):
+            # 添加分割线
+            detail_images.append(PictureProcessing("RGB", (top_bg.width, 20), (255, 255, 255)))
+
+            t_title = self.get_text_value("提示{}主标题".format(index + 1))
+            if t_title:
+                t_title_pp = PictureProcessing("RGB", (top_bg.width, 500), (255, 255, 255))
+                t_title_pp=t_title_pp.get_text_image_advanced(
+                    value=(int(top_bg.width / 2), 0),
+                    font=title_font,
+                    text=t_title,
+                    align="center",
+                    anchor="ma",
+                    spacing=10,
+                    fill=(55, 55, 55),
+                    return_mode="min_image_high",
+                    margins=(10, 10, 0, 0)
+                )
+                detail_images.append(t_title_pp)
+
+
+                t_sub_title = self.get_text_value("提示{}副标题".format(index + 1))
+                if t_sub_title:
+                    t_sub_title_pp = PictureProcessing("RGB", (top_bg.width, 500), (255, 255, 255))
+                    t_sub_title_pp = t_sub_title_pp.get_text_image_advanced(
+                        value=(int(top_bg.width / 2),0),
+                        font=sub_title_font,
+                        text=t_sub_title,
+                        align="center",
+                        anchor="ma",
+                        spacing=10,
+                        fill=(55, 55, 55),
+                        return_mode="min_image_high",
+                        margins=(10, 10, 0, 0)
+                    )
+                    detail_images.append(t_sub_title_pp)
+
+
+            # 添加图
+            pp_jpg = self.get_overlay_pic_from_dict(
+                goods_art_no=goods_art_no_list[0],
+                color_name=color_name,
+                bg_color=self.base_bg_color
+            )
+            t_desc = self.get_text_value("提示{}描述".format(index + 1))
+            if color_name == "俯视":
+                pp_jpg = pp_jpg.resize(value=1300)
+                pp_jpg = pp_jpg.paste_img_invert(
+                    top_img=PictureProcessing("RGB", (749, 1009 if pp_jpg.height>1009 else pp_jpg.height), (236, 227, 212)), base="ws",
+                    value=(-300, -50))
+                text_pos_value = (50, 50)
+                align = "left"
+                anchor = ""
+
+            if color_name == "内里":
+                pp_jpg = pp_jpg.resize(value=2000)
+                pp_jpg = pp_jpg.paste_img_invert(
+                    top_img=PictureProcessing("RGB", (749, pp_jpg.height + 150), (236, 227, 212)), base="wc",
+                    value=(-230, 0))
+                text_pos_value = (50, 50)
+                align = "left"
+                anchor = ""
+
+            if color_name == "侧视":
+                pp_jpg = pp_jpg.resize(value=1600)
+                pp_jpg = pp_jpg.paste_img_invert(
+                    top_img=PictureProcessing("RGB", (749, 1009 if pp_jpg.height>1009 else pp_jpg.height), (236, 227, 212)), base="se",
+                    value=(0, -30))
+                text_pos_value = (pp_jpg.width - 30, pp_jpg.height - 360)
+                align = "right"
+                anchor = "rs"
+
+            if t_desc:
+                pp_jpg = pp_jpg.add_text(
+                    mode="pixel",
+                    value=text_pos_value,
+                    font=desc_font,
+                    text=t_desc,
+                    align=align,
+                    anchor=anchor,
+                    spacing=10,
+                    fill=(102, 102, 102),
+                )
+            pp_jpg = pp_jpg.paste_img_invert(
+                top_img=PictureProcessing("RGB", (top_bg.width, pp_jpg.height,), (255, 255, 255), ), base="cc",
+                value=(0, 0))
+            detail_images.append(pp_jpg)
+            # 添加分割线
+            detail_images.append(PictureProcessing("RGB", (top_bg.width, 60), (255, 255, 255), ))
+
+        # 添加分割线
+        detail_images.append(PictureProcessing("RGB", (top_bg.width, 100), (255, 255, 255), ))
+        image = PictureProcessing(im=self.add_pic(detail_images))
+        return image
+
+    def deal_pic_5(self):
+        bg_color = (255, 255, 255)
+        detailed_images = []
+        goods_art_no_list = list(self.data.keys())
+        top_bg = PictureProcessing(
+            r"{}\template_5.png".format(
+                self.root
+            )
+        )
+
+        detailed_images.append(top_bg)
+        pp_list_1 = []
+        color_name_1 = ["俯视", "侧视", "内里", "后跟", "鞋底"]
+        color_name_2 = ["俯视", "鞋底"]
+
+        color_name_1 = ["俯视", "侧视", "鞋底"]
+        color_name_2 = ["俯视", "内里", "后跟"]
+        n = 0
+        pp_1_height = 100
+
+        for index, goods_art_no in enumerate(goods_art_no_list):
+            if index in [0, 2, 4, 6, 8]:
+                color_name = color_name_1
+            else:
+                color_name = color_name_2
+
+            for name in color_name:
+                pp_1 = self.get_overlay_pic_from_dict(
+                    goods_art_no=goods_art_no,
+                    color_name=name,
+                    bg_color=self.base_bg_color
+                )
+
+                if pp_1:
+                    n += 1
+                    if name != "后跟":
+                        pp_1 = pp_1.resize(value=int(top_bg.width / 1.4))
+                    else:
+                        pp_1 = pp_1.resize(value=int(top_bg.width / 3))
+
+                    if n == 1:
+                        pp_1_height = pp_1.height
+
+                    _height = pp_1.height if pp_1.height > pp_1_height else pp_1_height
+
+                    pp_1 = pp_1.paste_img_invert(base="cc",
+                                                 top_img=PictureProcessing("RGB",
+                                                                           (int(top_bg.width / 1.4), _height + 10,),
+                                                                           self.base_bg_color))
+
+                    pp_1 = pp_1.paste_img_invert(base="cc",
+                                                 top_img=PictureProcessing("RGB",
+                                                                           (top_bg.width, _height + 100,),
+                                                                           (255, 255, 255)))
+
+                    pp_list_1.append(pp_1)
+
+        if pp_list_1:
+            pp_list_1.append(PictureProcessing("RGB", (top_bg.width, 100), bg_color))
+            detailed_images.extend(pp_list_1)
+
+        # return PictureProcessing(im=self.add_pic(detailed_images))
+        return self.pp_pic_subsection(PictureProcessing(im=self.add_pic(detailed_images)))
+
+
+    def get_font_render_size(self, text, font, canvas_size=(2048, 2048)):
+        canvas = Image.new('RGB', canvas_size)
+        draw = ImageDraw.Draw(canvas)
+        draw.text((0, 0), text, font=font, fill=(55, 55, 55))
+        bbox = canvas.getbbox()
+        # 宽高
+        size = (bbox[2] - bbox[0], bbox[3] - bbox[1])
+        return size
+

+ 26 - 23
python/custom_plugins/plugins_mode/detail_generate_base.py

@@ -590,36 +590,39 @@ class DetailBase(object):
             self.create_folder(goods_art_no_f)
             # 放入一张主图
             old_pic_path_1 = sorted_list_800[0]
-            shutil.copy(
+            try:
+                shutil.copy(
                 old_pic_path_1,
                 "{}/颜色图{}{}".format(
                     goods_art_no_f, goods_art_no, os.path.splitext(old_pic_path_1)[1]
                 ),
             )
 
-            # 把其他主图放入作为款号图=====================
-            if move_main_pic:
-                for idx,pic_path in enumerate(sorted_list_800):
-                    index = idx + 1
-                    try:
-                      split_size = pic_path.split("_")[1].split(".")[0]
-                    except:
-                      split_size = ""
-                    suffix_name = "_"+split_size if split_size else ""
-                    print("pic_path=========>",split_size)
-                    e = os.path.splitext(pic_path)[1]
-                    shutil.copy(
-                        pic_path,
-                        "{out_put_dir}/主图{goods_no}({goods_no_main_pic_number}){suffix_name}{e}".format(
-                            out_put_dir=self.out_put_dir,
-                            goods_no=goods_art_no,
-                            goods_no_main_pic_number=str(
-                                index
+                # 把其他主图放入作为款号图=====================
+                if move_main_pic:
+                    for idx,pic_path in enumerate(sorted_list_800):
+                        index = idx + 1
+                        try:
+                            split_size = pic_path.split("_")[1].split(".")[0]
+                        except:
+                            split_size = ""
+                        suffix_name = "_"+split_size if split_size else ""
+                        print("pic_path=========>",split_size)
+                        e = os.path.splitext(pic_path)[1]
+                        shutil.copy(
+                            pic_path,
+                            "{out_put_dir}/主图{goods_no}({goods_no_main_pic_number}){suffix_name}{e}".format(
+                                out_put_dir=self.out_put_dir,
+                                goods_no=goods_art_no,
+                                goods_no_main_pic_number=str(
+                                    index
+                                ),
+                                e=e,
+                                suffix_name=suffix_name
                             ),
-                            e=e,
-                            suffix_name=suffix_name
-                        ),
-                    )
+                        )
+            except Exception as e:
+                print("324 移动其他图片异常", e)
 
     def deal_all_main_pic(self):
         """

+ 3 - 3
python/detail_template_test.py

@@ -4,17 +4,17 @@ import settings
 settings.is_test_plugins = True
 
 
-from custom_plugins.plugins.detail_template.qingyangyizhan.detail_qingyangyizhan2 import (
+from custom_plugins.plugins.detail_template.xiaosushuoxie.detail_xiaosushuoxie7 import (
     DetailPicGet,
 )
 
 
-data = json.load(open("detail_template_test_qingyangyizhan.json", mode="r", encoding="utf-8"))
+data = json.load(open("detail_template_test_xiaosushuoxie.json", mode="r", encoding="utf-8"))
 for goods_no, value in data.items():
     d = DetailPicGet(
         goods_no=goods_no,
         goods_no_value=value,
-        out_put_dir=r"C:\Development\project\python\CameraMachine\python\output\detail_qingyangyizhan2",
+        out_put_dir=r"C:\Development\project\python\CameraMachine\python\output\detail_xiaosushuoxie7",
         test=False,
     )
 print("生成成功")

+ 83 - 0
python/detail_template_test_xiaosushuoxie.json

@@ -0,0 +1,83 @@
+{
+    "AC5120913": {
+        "款号": "AC5120913",
+        "货号资料": [
+            {
+                "货号": "AC51016112",
+                "文件夹名称": "AC51016112",
+                "编号": "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(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(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(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",
+                    "组合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": [
+                    "C:/Users/15001/Desktop/测试文件夹/AC51016112/800x800/AC51016112(1).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51016112/800x800/AC51016112(2).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51016112/800x800/AC51016112(3).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51016112/800x800/AC51016112(4).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51016112/800x800/AC51016112(5).jpg"
+                ]
+            },
+            {
+                "货号": "AC51209131",
+                "文件夹名称": "AC51209131",
+                "编号": "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(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(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"
+                },
+                "800x800": [
+                    "C:/Users/15001/Desktop/测试文件夹/AC51209131/800x800/AC51209131(1).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51209131/800x800/AC51209131(2).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51209131/800x800/AC51209131(3).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51209131/800x800/AC51209131(4).jpg",
+                    "C:/Users/15001/Desktop/测试文件夹/AC51209131/800x800/AC51209131(5).jpg"
+                ]
+            }
+        ],
+        "文件夹名称": "AC51016112",
+        "主标题": "百搭休闲",
+        "副标题": "简约百搭-轻盈软弹-舒适增高",
+        "签名": "ST&SAT",
+        "设计理念": "经典凹出兼具动感同时带来轻盈\n步调轻软,松弛自在蔓延\n立体质感让朝气肆意绽放",
+        "帮面": "网布+合成革",
+        "鞋底": "橡胶底",
+        "内里": "网布",
+        "鞋垫": "合成革",
+        "鞋宽": "11.8CM",
+        "帮高": "5.7CM",
+        "跟高": "7.0CM",
+        "细节亮点主标题": "舒适鞋面",
+        "细节亮点副标题": "轻透网面享受每一步的清爽",
+        "艺-主标题": "鞋面弧形拼接",
+        "艺-副标题": "尽显不拘一格风尚",
+        "跟-主标题": "鞋底跟高7.0CM",
+        "跟-副标题": "迈步更轻松",
+        "底-主标题": "全底贴地 出行畅快",
+        "底-副标题": "凹凸纹理,轻松行走"
+    }
+}