| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586 |
- """
- 步骤:
- 1、整理需要处理的款号图-输出款号图文件夹
- 2、整理所有相关的图片作为素材图
- 3、按要求进行拼接
- """
- import os
- import time
- 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
- from PIL import Image, ImageDraw
- import math
- class DetailPicGetXiaoSuShuoXie5(DetailBase):
- need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
- root = r"{}\resources\detail_temp\xiaosushuoxie\5".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\5".format(os.getcwd())
- print("run xiaosushuoxie-5 ")
- 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,
- self.deal_pic_7,
- self.deal_pic_8,
- self.deal_pic_9,
- self.deal_pic_10,
- self.deal_pic_11,
- ]
- 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())
- detailed_images.append(self.deal_pic_7())
- detailed_images.append(self.deal_pic_8())
- detailed_images.append(self.deal_pic_9())
- detailed_images.append(self.deal_pic_10())
- detailed_images.append(self.deal_pic_11())
- 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"{}\t (1).png".format(self.root))
- # -------粘贴文字-------
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 74) # 设计理念
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 44) # 描述主标题1
- font_3 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 44) # 描述副标题1
- text_list = []
- text_list.append({"text": self.get_text_value("设计理念"),
- "font": font_1,
- "fill": (47, 44, 51),
- "spacing": 50,
- })
- # 主标题
- text_list.append({"text": self.get_text_value("标题"),
- "font": font_2,
- "fill": (124, 91, 24),
- })
- text_list.append({"text": self.get_text_value("副标题"),
- "font": font_3,
- "fill": (55, 55, 55),
- })
- text_image = self.add_text_list(text_list, spacing=15, base="en")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="ne",
- value=(133, 277))
- return pp_bg
- # 展示鞋头和后跟
- def deal_pic_2(self):
- pp_bg = PictureProcessing(r"{}\t (2).png".format(self.root))
- 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_png_1: PictureProcessing
- pp_png_1 = pp_png_1.resize(value=1187)
- pp_png_1 = pp_png_1.rotate_advance(doge=90)
- pp_png_1 = pp_png_1.crop(bbox=(0, 0, pp_png_1.width, 473))
- pp_bg = pp_bg.paste_img(top_img=pp_png_1,
- value=(349 - pp_png_1.width / 2, 342),
- base="sw"
- )
- pp_jpg_2, pp_png_2 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="后跟",
- )
- pp_png_2: PictureProcessing
- pp_png_2 = pp_png_2.resize(value=502)
- pp_png_2 = pp_png_2.crop(mode="min")
- pp_png_2 = pp_png_2.crop(bbox=(0, 0, pp_png_2.width, 473))
- pp_bg = pp_bg.paste_img(top_img=pp_png_2,
- value=(871 - pp_png_2.width / 2, 342),
- base="sw"
- )
- # 添加标题文字等
- # -------粘贴文字-------
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 42) # 特征标题
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 30) # 特征描述
- text_list = []
- # 鞋头特征
- text_list.append({"text": self.get_text_value("鞋头特征"),
- "font": font_1,
- "fill": (48, 43, 49),
- "spacing": 0,
- })
- # 主标题
- # 鞋头描述
- text_list.append({"text": self.get_text_value("鞋头描述"),
- "font": font_2,
- "fill": (164, 164, 164),
- })
- text_image = self.add_text_list(text_list, spacing=15, base="nc")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="nw",
- value=(349 - text_image.width / 2, 511))
- text_list = []
- # 后跟特征
- text_list.append({"text": self.get_text_value("后跟特征"),
- "font": font_1,
- "fill": (48, 43, 49),
- "spacing": 0,
- })
- # 后跟描述
- text_list.append({"text": self.get_text_value("后跟描述"),
- "font": font_2,
- "fill": (164, 164, 164),
- })
- text_image = self.add_text_list(text_list, spacing=15, base="nc")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="nw",
- value=(871 - text_image.width / 2, 511))
- return pp_bg
- # 展示鞋头放大图
- def deal_pic_3(self):
- pp_bg = PictureProcessing(r"{}\t (3).png".format(self.root))
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 70) # 设计理念
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 46) # 描述主标题1
- font_3 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 44) # 描述主标题2
- text_list = []
- # 鞋头特征
- text_list.append({"text": self.get_text_value("设计理念2"),
- "font": font_1,
- "fill": (3, 3, 2),
- "spacing": 40,
- })
- # 主标题
- text_list.append({"text": self.get_text_value("提示2主标题"),
- "font": font_2,
- "fill": (124, 91, 24),
- })
- text_list.append({"text": self.get_text_value("提示2副标题"),
- "font": font_3,
- "fill": (26, 25, 23),
- })
- text_image = self.add_text_list(text_list, spacing=10, base="nw")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="nw",
- value=(140, 176))
- # 粘贴俯视图
- 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_png_1: PictureProcessing
- pp_png_1 = pp_png_1.resize(value=1933)
- pp_png_1 = pp_png_1.crop(mode="min")
- pp_bg = pp_bg.paste_img(top_img=pp_png_1,
- value=(202, 86),
- base="sw"
- )
- return pp_bg
- # 展示后跟放大图
- def deal_pic_4(self):
- pp_bg = PictureProcessing(r"{}\t (4).png".format(self.root))
- h = 176
- # ===========粘贴文字============
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 46) # 描述主标题1
- font_3 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 44) # 描述主标题2
- text_list = []
- # 鞋头特征
- # 主标题
- text_list.append({"text": self.get_text_value("提示3主标题"),
- "font": font_2,
- "fill": (124, 91, 24),
- })
- text_list.append({"text": self.get_text_value("提示3副标题"),
- "font": font_3,
- "fill": (26, 25, 23),
- })
- text_image = self.add_text_list(text_list, spacing=10, base="ne")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="ne",
- value=(140, h))
- # 粘贴侧视图
- goods_art_no_list = list(self.data.keys())
- pp_jpg, pp_png = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="侧视",
- )
- pp_jpg = pp_jpg.resize(value=2000)
- pp_png = pp_png.resize(value=2000)
- if text_image:
- h = h + text_image.height
- else:
- h = h
- pp_bg = pp_bg.to_overlay_pic_advance(mode="pixel", top_img=pp_jpg, base="en", value=(100, h),
- top_png_img=pp_png)
- # 总高
- h = h + pp_jpg.height + 50
- if h < pp_bg.height:
- # 剪裁
- pp_bg = pp_bg.crop(bbox=(0, 0, 1200, h))
- return pp_bg
- # 展示后跟细节卡片
- def deal_pic_5(self):
- pp_bg = PictureProcessing(r"{}\t (5).png".format(self.root))
- # 粘贴侧视图
- 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_png_1: PictureProcessing
- pp_png_1 = pp_png_1.resize(value=1621)
- pp_png_1 = pp_png_1.rotate_advance(doge=45)
- pp_png_1 = pp_png_1.transpose()
- pp_png_1 = pp_png_1.crop(mode="min")
- shoe_bg = PictureProcessing("RGB", (448, 464), self.base_bg_color)
- shoe_bg = shoe_bg.paste_img(top_img=pp_png_1,
- value=(-80, 200),
- base="wc"
- )
- shoe_bg = shoe_bg.radius(circular_pos=(0, 0, 1, 0), value=30)
- pp_bg = pp_bg.paste_img(top_img=shoe_bg,
- value=(613, 174),
- base="nw")
- # 添加文字
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 40) # 设计理念
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 30) # 描述主标题1
- text_list = []
- text_list.append({"text": self.get_text_value("提示4主标题"),
- "font": font_1,
- "fill": (10, 7, 6),
- })
- text_list.append({"text": self.get_text_value("提示4副标题"),
- "font": font_2,
- "fill": (72, 65, 59),
- })
- text_image = self.add_text_list(text_list, spacing=38, base="nw")
- if text_image:
- pp_bg = pp_bg.paste_img(
- top_img=text_image,
- base="nw",
- value=(154, 210))
- return pp_bg
- # "心动"设计亮点,展示旋转的侧视图
- def deal_pic_6(self):
- detailed_images = []
- pp_bg = PictureProcessing(r"{}\t (6).png".format(self.root))
- # 粘贴侧视图
- 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_png_1: PictureProcessing
- pp_png_1 = pp_png_1.resize(value=2050)
- pp_png_1 = pp_png_1.transpose()
- pp_png_1 = pp_png_1.rotate_advance(doge=20)
- pp_png_1 = pp_png_1.crop(mode="min")
- pp_bg = pp_bg.paste_img(top_img=pp_png_1,
- value=(-200, 200),
- base="ws"
- )
- # ========添加文字==================
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 70) # 设计理念
- text = self.get_text_value("设计理念3")
- pp_bg = pp_bg.get_text_image_advanced(
- value=(pp_bg.width - 127, pp_bg.height - 43),
- font=font_1,
- text=text,
- anchor="rs",
- align="right",
- spacing=5,
- fill=(109, 107, 109),
- return_mode="image",
- )
- return pp_bg
- # 产品展示,展示大图各个细节
- def deal_pic_7(self):
- detailed_images = []
- detailed_images.append(PictureProcessing(r"{}\t (7).png".format(self.root)))
- goods_art_no_list = list(self.data.keys())
- goods_art_no = goods_art_no_list[0]
- # ======展示组合图============
- pp_1 = self.get_overlay_pic_from_dict(
- goods_art_no=goods_art_no,
- color_name="组合",
- bg_color=self.base_bg_color_2
- )
- if pp_1:
- pp_1 = pp_1.resize(value=1200)
- pp_1 = pp_1.paste_img_invert(
- top_img=PictureProcessing("RGB", (1200, pp_1.height + 300), self.base_bg_color_2),
- base="cc", )
- detailed_images.append(pp_1)
- # ======展示鞋面===============
- detailed_images.append(PictureProcessing(r"{}\t (9).png".format(self.root)))
- pp_2 = self.get_overlay_pic_from_dict(
- goods_art_no=goods_art_no,
- color_name="俯视",
- bg_color=self.base_bg_color_2
- )
- pp_2: PictureProcessing
- pp_2 = pp_2.resize(value=1519)
- pp_2 = pp_2.paste_img_invert(top_img=PictureProcessing("RGB", (1200, pp_2.height + 50), self.base_bg_color_2),
- base="ws", value=(171, 0))
- detailed_images.append(pp_2)
- # =======展示后跟=========
- detailed_images.append(PictureProcessing(r"{}\t (10).png".format(self.root)))
- pp_3 = self.get_overlay_pic_from_dict(
- goods_art_no=goods_art_no,
- color_name="侧视",
- bg_color=self.base_bg_color_2
- )
- pp_3: PictureProcessing
- pp_3 = pp_3.resize(value=1881)
- pp_3 = pp_3.paste_img_invert(top_img=PictureProcessing("RGB", (1200, pp_3.height + 200), self.base_bg_color_2),
- base="ec", value=(171, 0))
- detailed_images.append(pp_3)
- # =========展示鞋底============
- detailed_images.append(PictureProcessing(r"{}\t (11).png".format(self.root)))
- pp_jpg_4, pp_png_4 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no,
- name="鞋底",
- )
- pp_png_4: PictureProcessing
- pp_png_4 = pp_png_4.resize(value=2380)
- pp_png_4 = pp_png_4.rotate_advance(doge=45)
- pp_png_4 = pp_png_4.paste_img_invert(
- top_img=PictureProcessing("RGB", (1200, pp_png_4.height + 200), self.base_bg_color_2),
- base="ws", value=(269, 81))
- detailed_images.append(pp_png_4)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 功能展示与卖点
- def deal_pic_8(self):
- detailed_images = []
- detailed_images.append(PictureProcessing(r"{}\t (12).png".format(self.root)))
- goods_art_no_list = list(self.data.keys())
- goods_art_no = goods_art_no_list[0]
- color_name_list = ["侧视", "鞋底", "俯视"]
- font_1 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 42) # 卖点标题1
- font_2 = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 32) # 卖点标题2
- font_3 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 26) # 卖点描述1
- # =====卖点1,展示后跟========
- for color_name in color_name_list:
- bg = PictureProcessing(r"{}\t (13).png".format(self.root))
- pp_jpg, pp_png = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no,
- name=color_name,
- )
- temp_bg = PictureProcessing("RGB", (536, 424), (214, 214, 214))
- if color_name == "侧视":
- pp_png = pp_png.resize(value=990)
- temp_bg = temp_bg.paste_img(top_img=pp_png, base="es")
- shoe_paste_base = "wc"
- text_1, text_2 = self.get_text_value("卖点1标题", subsection_len=2)
- text_3 = self.get_text_value("卖点1介绍")
- text_paste_base = "ec"
- text_paste_value = (312, 0)
- if color_name == "鞋底":
- pp_png = pp_png.resize(value=1000)
- temp_bg = temp_bg.paste_img(top_img=pp_png, base="wc", value=(0, 0))
- shoe_paste_base = "ec"
- text_1, text_2 = self.get_text_value("卖点2标题", subsection_len=2)
- text_3 = self.get_text_value("卖点2介绍")
- text_paste_base = "wc"
- text_paste_value = (312, 0)
- if color_name == "俯视":
- pp_png = pp_png.resize(value=1418)
- temp_bg = temp_bg.paste_img(top_img=pp_png, base="cc")
- shoe_paste_base = "wc"
- text_1, text_2 = self.get_text_value("卖点3标题", subsection_len=2)
- text_3 = self.get_text_value("卖点3介绍")
- text_paste_base = "ec"
- text_paste_value = (312, 0)
- # 添加圆角
- temp_bg = temp_bg.radius(circular_pos=(1, 1, 1, 1), value=50)
- # 粘贴到背景上
- temp_bg = temp_bg.paste_img_invert(top_img=bg, base=shoe_paste_base, value=(99, 0))
- text_list = []
- # 卖点主标题
- text_list.append({"text": text_1,
- "font": font_1,
- "fill": (2, 2, 2),
- "spacing": 0,
- })
- text_list.append({"text": text_2,
- "font": font_2,
- "fill": (43, 43, 43),
- "spacing": 10,
- })
- # 主标题
- text_list.append({"text": text_3,
- "font": font_3,
- "fill": (165, 165, 165),
- })
- text_image = self.add_text_list(text_list, spacing=15, base="nc")
- if text_image:
- temp_bg = temp_bg.paste_img(
- top_img=text_image,
- base=text_paste_base,
- value=(text_paste_value[0] - text_image.width / 2, text_paste_value[1]))
- detailed_images.append(temp_bg)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 添加尺码表
- def deal_pic_9(self):
- image_path = r"{}\t (16).png".format(self.root)
- return PictureProcessing(image_path)
- # 角度展示
- def deal_pic_10(self):
- detailed_images = []
- # 角度展示标题
- detailed_images.append(PictureProcessing(r"{}\t (17).png".format(self.root)))
- # 添加颜色名称字体
- font_color = ImageFont.truetype(r"resources\ttf\puhui\Bold.ttf", 30)
- for goods_art_no_dict in self.goods_no_value["货号资料"]:
- color_name = goods_art_no_dict["颜色名称"]
- goods_art_no = goods_art_no_dict["货号"]
- # ====颜色主图
- pp_1 = self.get_overlay_pic_from_dict(
- goods_art_no=goods_art_no,
- color_name="俯视",
- bg_color=(255, 255, 255)
- )
- pp_1: PictureProcessing
- pp_1 = pp_1.resize(value=865)
- pp_1 = pp_1.paste_img_invert(top_img=PictureProcessing("RGB", (1152, pp_1.height + 100), (255, 255, 255)),
- base="sc"
- )
- # 粘贴颜色名称
- pp_1 = pp_1.get_text_image_advanced(
- value=(90, 50),
- font=font_color,
- text=color_name,
- spacing=1,
- return_mode="image",
- )
- pp_1 = pp_1.paste_img_invert(top_img=PictureProcessing("RGB", (1200, pp_1.height), (243, 243, 243)),
- base="cc"
- )
- detailed_images.append(pp_1)
- # 添加处理各个角度
- view_name_list = ["内里", "鞋底", "后跟", "侧视"]
- color_pic_list = []
- for view_name in view_name_list:
- _, pp_png = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no,
- name=view_name,
- )
- temp_bg = PictureProcessing("RGB", (546, 338), (243, 243, 243))
- # if view_name == "内里":
- # pp_png = pp_png.resize(base_by_box=(temp_bg.width * 0.9, temp_bg.height * 0.9))
- # if view_name == "鞋底":
- # pp_png = pp_png.resize(base_by_box=(temp_bg.width * 0.9, temp_bg.height * 0.9))
- # if view_name == "后跟":
- # pp_png = pp_png.resize(base_by_box=(temp_bg.width * 0.9, temp_bg.height * 0.9))
- # if view_name == "侧视":
- # pp_png = pp_png.resize(base_by_box=(temp_bg.width * 0.9, temp_bg.height * 0.9))
- pp_png = pp_png.resize(base_by_box=(temp_bg.width * 0.9, temp_bg.height * 0.9))
- temp_bg = temp_bg.paste_img(top_img=pp_png, base="cc")
- temp_bg = temp_bg.radius(value=30)
- color_pic_list.append(temp_bg)
- # 颜色列表进行等分展示
- all_color_pp = PictureProcessing().horizontal_distribution(color_pic_list, bg_width=1114, line_spacing=10,
- number_per_row=2)
- all_color_pp = all_color_pp.paste_img_invert(
- top_img=PictureProcessing("RGB", (1152, all_color_pp.height + 100), (255, 255, 255)), base="cc")
- all_color_pp = all_color_pp.paste_img_invert(
- top_img=PictureProcessing("RGB", (1200, all_color_pp.height), (243, 243, 243)), base="cc")
- detailed_images.append(all_color_pp)
- # 添加底部圆弧分割线
- b_bg = PictureProcessing("RGB", (1152, 30), (255, 255, 255))
- b_bg = b_bg.radius(circular_pos=(0, 0, 1, 1), value=30)
- b_bg = b_bg.paste_img_invert(top_img=PictureProcessing("RGB", (1200, b_bg.height + 50), (243, 243, 243)),
- base="nc")
- detailed_images.append(b_bg)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 添加注意事项
- def deal_pic_11(self):
- image_path = r"{}\t (21).png".format(self.root)
- return PictureProcessing(image_path)
|