瀏覽代碼

信诺3模版、组合图取值、字截取

swortect 6 月之前
父節點
當前提交
96effaac4a

+ 530 - 0
python/custom_plugins/plugins/detail_template/xinnuo/detail_xinnuo3.py

@@ -0,0 +1,530 @@
+"""
+步骤:
+1、整理需要处理的款号图-输出款号图文件夹
+2、整理所有相关的图片作为素材图
+3、按要求进行拼接
+"""
+
+from ast import mod
+import os
+import settings
+
+from PIL import ImageFont
+import copy
+
+# 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
+is_test_plugins = False
+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
+
+plugins_name = "详情模板"
+company_name_list = ["信诺"]
+template_name = "xinnuo-3"
+# "俯视", "侧视", "后跟", "鞋底", "内里" 组合,组合2
+
+class DetailPicGet(DetailBase):
+    need_view = ["俯视", "侧视", "后跟", "鞋底", "内里","组合","组合2","组合3","组合4"]
+    root = r"{}\resources\detail_temp\xinnuo\3".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.template_name = template_name
+
+        self.root = r"{}\resources\detail_temp\xinnuo\3".format(os.getcwd())
+        print("run xinnuo-3 ")
+        self.base_bg_color = (255, 255, 255)
+        self.base_bg_color_2 = (244, 242, 243)
+        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,
+            self.deal_pic_6,
+        ]
+
+        if test:
+            # pp = self.generate_font_list_to_pic()
+            # pp.im.save(r"C:\Users\gymmc\Desktop\细节图示例/字号.png")
+            # for k, v in self.goods_no_value.items():
+            #     print(k, v)
+            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())
+        detailed_images.append(self.deal_pic_6())
+        img = self.add_pic(detailed_images)
+        img.save(r"{}/{}.jpg".format(self.out_put_dir, self.goods_no, format="JPEG"))
+        img.show()
+
+
+    def deal_pic_1(self):
+        pp_bg = PictureProcessing(r"{}\1.jpg".format(self.root),1600)
+
+        goods_art_no_list = list(self.data.keys())
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name="组合",
+        )
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width/1.1)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width /1.1)
+
+        if self.check_shoe_is_right_by_pixel(im=pp_png_1.im)==False:
+            pp_jpg_1 = pp_jpg_1.transpose()
+            pp_png_1 = pp_png_1.transpose()
+
+        pp_png_1_bg = PictureProcessing("RGBA", (pp_jpg_1.width*1.4, pp_jpg_1.width*1.4), (255,255,255,0))
+        pp_png_1_bg = pp_png_1_bg.paste_img(
+            top_img=pp_png_1,base="nc", value=(0, 0)
+        )
+        pp_png_1_bg = pp_png_1_bg.rotate(0)
+
+        pp_bg = pp_bg.paste_img(
+            top_img=pp_png_1_bg,base="cc", value=(25, 350)
+        )
+
+        return pp_bg
+    def deal_pic_2(self):
+        pp_bg = PictureProcessing(r"{}\2.jpg".format(self.root), 1600)
+        goods_art_no_list = list(self.data.keys())
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name="俯视",
+        )
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width/1.2)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width/1.2)
+        # pp_bg = pp_bg.paste_img(top_img=shoe_bg, value=(0, 0), base="nw")
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            mode="pixel",
+            top_img=pp_jpg_1,
+            base="wc",
+            value=(30, 70),
+            top_png_img=pp_png_1,
+        )
+        font = ImageFont.truetype(
+            r"resources\ttf\puhui\Medium.ttf", 24
+        )  # 设计理念
+        font_hei = ImageFont.truetype(r"resources\ttf\simhei.ttf", 24)  # 设计理念
+        xiemian  = self.get_text_value("鞋面")
+        xiedian = self.get_text_value("鞋垫")
+        neili = self.get_text_value("内里")
+        xiedi = self.get_text_value("鞋底")
+
+
+        zhangkuan = self.get_text_value("掌宽")
+        gengao = self.get_text_value("跟高")
+
+        pp_bg.get_text_image_advanced(
+            value=(264, 681),
+            font=font,
+            text=xiemian,
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+        pp_bg.get_text_image_advanced(
+            value=(611, 681),
+            font=font,
+            text=neili,
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+        pp_bg.get_text_image_advanced(
+            value=(611, 760),
+            font=font,
+            text=xiedi,
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+        pp_bg.get_text_image_advanced(
+            value=(264, 760),
+            font=font,
+            text=xiedian,
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+
+
+
+        pp_bg.get_text_image_advanced(
+            value=(212, 409),
+            font=font_hei,
+            text=f"掌宽\n{zhangkuan}",
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+
+        pp_bg.get_text_image_advanced(
+            value=(588, 469),
+            font=font_hei,
+            text=f"跟高\n{gengao}",
+            align="left",
+            # anchor="ma",
+            spacing=5,
+            fill=(52, 52, 52),
+            return_mode="image",
+            margins=(0, 0, 0, 0),
+        )
+        return pp_bg
+    def deal_pic_3(self):
+        detailed_images = []
+        pp_bg = PictureProcessing(r"{}\3.jpg".format(self.root))
+        goods_art_no_list = list(self.data.keys())
+        all_color_name = []
+        bg_color = (247, 247, 247)
+        text_color = (52, 52, 52)
+        font = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 25)
+        goods_art_images = []
+        total_height = 0
+        for index, goods_art_no in enumerate(goods_art_no_list):
+            pp_jpg,pp_png = self.image_one_pic(
+                goods_art_no=goods_art_no,
+                name="侧视",
+                return_orign=True,
+            )
+            if pp_jpg is None:
+                continue
+            pp_jpg = pp_jpg.resize(value=pp_bg.width / 2.5)
+            pp_png = pp_png.resize(value=pp_bg.width / 2.5)
+            color_name = self.goods_no_value["货号资料"][index]["颜色名称"]
+            all_color_name.append(color_name)
+            text_bg = PictureProcessing("RGBA", (pp_jpg.width, 50), (255,255,255,0))
+            text_bg = text_bg.get_text_image_advanced(
+                value=(0, 0),
+                font=font,
+                text="{}".format(color_name),
+                # text="{}".format(color_name),
+                align="center",
+                # anchor="mm",
+                spacing=5,
+                fill=text_color,
+                return_mode="image",
+                margins=(0, 0, 0, 0),
+            )
+            _bg = PictureProcessing(
+                "RGB",
+                (pp_bg.width / 2, pp_jpg.height+200),
+                bg_color,
+            )
+            if (index+1) == 1:
+                total_height += _bg.height
+            if (index + 1) % 2 != 0 and (index + 1) != 1:
+                total_height += _bg.height
+            _bg = _bg.to_overlay_pic_advance(top_img=pp_jpg,top_png_img=pp_png, base="center")
+            _bg = _bg.paste_img(
+                top_img=text_bg, value=(pp_jpg.width / 2, pp_jpg.height+60)
+            )
+            goods_art_images.append(_bg)
+        rows = 2
+        shoes_bg = PictureProcessing(
+        ).horizontal_distribution(
+            pp_list=goods_art_images,
+            bg_width=pp_bg.width,
+            margins=(0, 0, 0, 0),
+            line_spacing=0,
+            number_per_row=rows,
+        )
+        main_bg = PictureProcessing(
+            "RGB",
+            (pp_bg.width, total_height),
+            bg_color,
+        )
+        main_bg.paste_img(top_img=shoes_bg)
+        detailed_images.append(main_bg)
+        return PictureProcessing(im=self.add_pic(detailed_images))
+
+        return pp_bg
+    def deal_pic_4(self):
+        pp_bg = PictureProcessing(r"{}\4.jpg".format(self.root))
+        return pp_bg
+    def deal_pic_5(self):
+        detailed_images = []
+        bg_image = PictureProcessing(r"{}\5.jpg".format(self.root))
+        goods_art_no_list = list(self.data.keys())
+
+
+        pp_jpg1, pp_png1 = self.image_one_pic(goods_art_no=goods_art_no_list[0], name="俯视", return_orign=True)
+        ppg_width=bg_image.width*0.6088
+        ppg_height=bg_image.width*0.6088*(329/481)
+        pph=ppg_height*2
+        ppw=(pp_png1.width/pp_png1.height)*pph
+        pp_png1=pp_png1.resize(value=bg_image.width*1.8)
+        pp_jpg1=pp_jpg1.resize(value=bg_image.width*1.8)
+        pp_png1 = pp_png1.rotate(15)
+        new_pp1_bg=PictureProcessing("RGB",(ppg_width,ppg_height),(255,255,255))
+
+        new_pp1_bg=new_pp1_bg.paste_img(
+            mode="pixel",top_img=pp_png1,base="sw",value=(-280, -140)
+        )
+
+        bg_image=bg_image.paste_img(
+            mode="pixel",top_img=new_pp1_bg,base="en",value=(20, 205)
+        )
+
+
+
+        pp_jpg1, pp_png1 = self.image_one_pic(goods_art_no=goods_art_no_list[0], name="组合4", return_orign=True)
+        ppg_width=bg_image.width*0.5
+        ppg_height=bg_image.width*0.5*(329/428)
+        pph=ppg_height*2
+        ppw=(pp_png1.width/pp_png1.height)*pph
+        pp_png1=pp_png1.resize(value=bg_image.width)
+        pp_jpg1=pp_jpg1.resize(value=bg_image.width)
+
+        new_pp1_bg=PictureProcessing("RGB",(ppg_width,ppg_height),(200,200,200))
+
+        new_pp1_bg=new_pp1_bg.paste_img(
+            mode="pixel",top_img=pp_png1,base="cc",value=(0, 0)
+        )
+
+        bg_image=bg_image.paste_img(
+            mode="pixel",top_img=new_pp1_bg,base="nw",value=(20, 205+367)
+        )
+
+
+        pp_jpg1, pp_png1 = self.image_one_pic(goods_art_no=goods_art_no_list[0], name="俯视", return_orign=True)
+        ppg_width=bg_image.width*0.6088
+        ppg_height=bg_image.width*0.6088*(329/481)
+        pph=ppg_height*2
+        ppw=(pp_png1.width/pp_png1.height)*pph
+        pp_png1=pp_png1.resize(value=bg_image.width*1.4)
+        pp_jpg1=pp_jpg1.resize(value=bg_image.width*1.4)
+        pp_png1 = pp_png1.rotate(30)
+        new_pp1_bg=PictureProcessing("RGB",(ppg_width,ppg_height),(255,255,255))
+
+        new_pp1_bg=new_pp1_bg.paste_img(
+            mode="pixel",top_img=pp_png1,base="en",value=(-240, -140)
+        )
+
+        bg_image=bg_image.paste_img(
+            mode="pixel",top_img=new_pp1_bg,base="en",value=(20, 205+367*2)
+        )
+
+        pp_jpg1, pp_png1 = self.image_one_pic(goods_art_no=goods_art_no_list[0], name="鞋底", return_orign=True)
+        ppg_width=bg_image.width*0.6088
+        ppg_height=bg_image.width*0.6088*(329/481)
+        pph=ppg_height*2
+        ppw=(pp_png1.width/pp_png1.height)*pph
+        pp_png1=pp_png1.resize(value=bg_image.width*1.5)
+        pp_jpg1=pp_jpg1.resize(value=bg_image.width*1.5)
+        pp_png1 = pp_png1.rotate(-45)
+        new_pp1_bg=PictureProcessing("RGB",(ppg_width,ppg_height),(255,255,255))
+
+        new_pp1_bg=new_pp1_bg.paste_img(
+            mode="pixel",top_img=pp_png1,base="nw",value=(-240, -130)
+        )
+        bg_image=bg_image.paste_img(
+            mode="pixel",top_img=new_pp1_bg,base="nw",value=(20, 205+367*3)
+        )
+
+
+        font_title = ImageFont.truetype(
+            r"resources\ttf\puhui\Regular.ttf", 31
+        )
+        font_desc = ImageFont.truetype(
+            r"resources\ttf\puhui\Regular.ttf", 20
+        )
+        text_list=[{'name':'细节1标题','align':'left','max_len':16,'default':'牛皮鞋面','value':(69, 281-10)},
+                   {'name':'细节1内容','align':'left','max_len':16,'default':'质感真皮鞋面 柔韧有型','value':(69, 332-10)},
+                   {'name':'细节2标题','align':'right','max_len':16,'default':'可调节式魔术贴','value':(500, 649-10)},
+                   {'name':'细节2内容','align':'right','max_len':16,'default':'穿脱随心方便舒适','value':(562, 700-10)},
+                   {'name':'细节3标题','align':'left','max_len':16,'default':'舒软鞋垫','value':(69, 1016-10)},
+                   {'name':'细节3内容','align':'left','max_len':16,'default':'沙发感鞋垫 契合足型','value':(69, 1066-10)},
+                   {'name':'细节4标题','align':'right','max_len':16,'default':'柔韧鞋底','value':(595, 1384-10)},
+                   {'name':'细节4内容','align':'right','max_len':16,'default':'舒适耐穿 畅快出行','value':(555, 1434-10)}
+                   ]
+
+
+        for item in text_list:
+            name = self.get_text_value(item['name'])
+            if name== None:
+                name = item['default']
+
+            if '标题' in item['name']:
+                bg_image.get_text_image_advanced(
+                    value=item['value'],
+                    font=font_title,
+                    text=name,
+                    align=item['align'],
+                    # anchor="ma",
+                    spacing=5,
+                    fill=(0, 0, 0),
+                    return_mode="image",
+                    margins=(0, 0, 0, 0),
+                    max_len_one_line=item['max_len']
+                )
+            else:
+                bg_image.get_text_image_advanced(
+                    value=item['value'],
+                    font=font_desc,
+                    text=name,
+                    align=item['align'],
+                    # anchor="ma",
+                    spacing=5,
+                    fill=(187, 187, 187),
+                    return_mode="image",
+                    margins=(0, 0, 0, 0),
+                    max_len_one_line=item['max_len']
+                )
+
+
+        detailed_images.append(bg_image)
+        return PictureProcessing(im=self.add_pic(detailed_images))
+
+    def deal_pic_6(self):
+        detailed_images = []
+        image_path = r"{}\6.jpg".format(self.root)
+        pp_bg = PictureProcessing(image_path,1600)
+        goods_art_no_list = list(self.data.keys())
+
+        # pp_bg_new = copy.deepcopy(pp_bg)
+
+
+
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name='组合',
+        )
+        # if self.check_shoe_is_right_by_pixel(im=pp_png_1.im):
+        #     pp_jpg_1 = pp_jpg_1.transpose()
+        #     pp_png_1 = pp_png_1.transpose()
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width / 1.7)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width / 1.7)
+
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(0, 270)
+        )
+
+
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name='组合2',
+        )
+        # if self.check_shoe_is_right_by_pixel(im=pp_png_1.im):
+        #     pp_jpg_1 = pp_jpg_1.transpose()
+        #     pp_png_1 = pp_png_1.transpose()
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width / 1.7)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width / 1.7)
+
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(0, 720)
+        )
+
+
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name='后跟',
+        )
+        # if self.check_shoe_is_right_by_pixel(im=pp_png_1.im):
+        #     pp_jpg_1 = pp_jpg_1.transpose()
+        #     pp_png_1 = pp_png_1.transpose()
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width / 1.7)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width / 1.7)
+
+        pp_jpg_2 = pp_jpg_1.transpose()
+        pp_png_2 = pp_png_1.transpose()
+
+
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(-50, 1150)
+        )
+
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            top_img=pp_jpg_2, top_png_img=pp_png_2, base="nc", value=(50, 1150)
+        )
+
+
+        pp_jpg_1, pp_png_1 = self.image_one_pic(
+            return_orign=True,
+            goods_art_no=goods_art_no_list[0],
+            name='组合3',
+        )
+        # if self.check_shoe_is_right_by_pixel(im=pp_png_1.im):
+        #     pp_jpg_1 = pp_jpg_1.transpose()
+        #     pp_png_1 = pp_png_1.transpose()
+        pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width / 1.7)
+        pp_png_1 = pp_png_1.resize(value=pp_bg.width / 1.7)
+
+        pp_bg = pp_bg.to_overlay_pic_advance(
+            top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(0, 1600)
+        )
+
+
+
+
+
+
+
+        detailed_images.append(pp_bg)
+
+        return self.pp_pic_subsection(
+            PictureProcessing(im=self.add_pic(detailed_images))
+        )
+
+
+if __name__ == "__main__":
+
+    d = DetailPicGet(
+        goods_no="test",
+        goods_no_value={},
+        out_put_dir="./output/xinnuo-3",
+        test=True,
+    )
+    d.run_test()

+ 2 - 1
python/custom_plugins/plugins_mode/detail_generate_base.py

@@ -361,6 +361,8 @@ class DetailBase(object):
         # 找任意一个有组合图的货号
         for goods_art_no_dict in self.goods_no_value["货号资料"]:
             _goods_art_no = goods_art_no_dict["货号"]
+            if _goods_art_no !=goods_art_no:
+                continue
             _view_name_list = set([x.split("-")[0] for x in goods_art_no_dict["pics"]])
             for _view_name in _view_name_list:
                 if "组合" not in _view_name:
@@ -371,7 +373,6 @@ class DetailBase(object):
                      "real_view_name": "组合1" if _view_name == "组合" else _view_name
                      }
                 )
-
         if len(data) <= view_index:
             return goods_art_no, "无法匹配"
         else:

+ 3 - 2
python/custom_plugins/plugins_mode/pic_deal.py

@@ -323,7 +323,7 @@ class PictureProcessing(object):
 
     def get_text_image_advanced(self, value=(0, 0), font="", text="", anchor=None, align="left", spacing=0,
                                 fill=(0, 0, 0),
-                                return_mode="image", margins=(0, 0, 0, 0)):
+                                return_mode="image", margins=(0, 0, 0, 0),max_len_one_line=0):
         """
         {
             "command": "add_text",
@@ -355,7 +355,8 @@ class PictureProcessing(object):
         # 定义字体,你需要有一个.ttf字体文件
         spacing = 4 if not spacing else spacing
         align = "left" if not align else align  # left, center 或 right
-
+        if max_len_one_line > 0:
+            text = text[:max_len_one_line]
         _, _, text_width, text_height = draw_1.textbbox((0, 0), text, font=font)
         value = (int(value[0]), int(value[1]))
 

二進制
python/resources/detail_temp/xinnuo/3/1.jpg


二進制
python/resources/detail_temp/xinnuo/3/2.jpg


二進制
python/resources/detail_temp/xinnuo/3/3.jpg


二進制
python/resources/detail_temp/xinnuo/3/4.jpg


二進制
python/resources/detail_temp/xinnuo/3/5.jpg


二進制
python/resources/detail_temp/xinnuo/3/6.jpg