| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- """
- 步骤:
- 1、整理需要处理的款号图-输出款号图文件夹
- 2、整理所有相关的图片作为素材图
- 3、按要求进行拼接
- """
- import os
- from PIL import ImageFont
- import sys
- import settings
- # 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 = ["miniso"]
- template_name = "miniso-1"
- # 运动鞋详情页
- class DetailPicGet(DetailBase):
- need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
- root = r"{}\resources\detail_temp\miniso\1".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, **kwargs):
- 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\miniso\1".format(os.getcwd())
- self.basic_width = PictureProcessing(r"{}\1.jpg".format(self.root)).width
- print(f"run {template_name}")
- # 红色
- self.red_color = (248, 55, 69)
- # 灰色
- self.gray_color = (227, 227, 227)
- self.white_color = (255, 255, 255)
- self.black_color = (0, 0, 0)
- self.base_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)
- if img:
- self.create_folder(r"{}/{}".format(self.out_put_dir, template_name))
- img.save(r"{}/{}/{}.jpg".format(self.out_put_dir, template_name, self.goods_no, format="JPEG"))
- img.show()
- # 斜视图展示 多色进行拼接
- def deal_pic_1(self):
- detailed_images = []
- font_title = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 60) # 颜色名称
- font_ml = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 40) # 颜色名称
- first_bg = PictureProcessing(r"{}\2.jpeg".format(self.root))
- first_bg = first_bg.resize(value=self.basic_width)
- circle_bg = PictureProcessing(r"{}\circle.png".format(self.root))
- circle_bg = circle_bg.resize(value=circle_bg.width + 60)
- circle_bg = circle_bg.resize(base='high', value=circle_bg.height + 10)
- title_text = self.get_text_value("标题一")
- ml_text = self.get_text_value("毫升")
- title_bg = PictureProcessing().get_text_image_advanced(
- font=font_title,
- text=title_text,
- fill=self.white_color,
- return_mode="min_image",
- )
- ml_bg = PictureProcessing().get_text_image_advanced(
- font=font_ml,
- text=ml_text,
- fill=self.white_color,
- return_mode="min_image",
- )
- first_bg = first_bg.paste_img(top_img=title_bg, value=(40, 100), base="nw")
- circle_bg = circle_bg.paste_img(top_img=ml_bg, value=(0, 0), base="cc")
- first_bg = first_bg.paste_img(top_img=circle_bg, value=(40, 300), base="nw")
- 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=self.basic_width / 2.8)
- pp_png_1 = pp_png_1.resize(value=self.basic_width / 2.8)
- first_bg = first_bg.to_overlay_pic_advance(top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(0, 380))
- # 图2
- second_bg = PictureProcessing("RGB", (self.basic_width, 825), self.white_color)
- second_bg = second_bg.radius(value=80, circular_pos=(1, 1, 1, 1))
- second_font_title = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 70) # 颜色名称
- second_title_text = self.get_text_value("标题二")
- second_title_bg = PictureProcessing().get_text_image_advanced(
- font=second_font_title,
- text=second_title_text,
- fill=self.black_color,
- return_mode="min_image",
- )
- second_bg = second_bg.paste_img(top_img=second_title_bg, value=(68, 50), base="nw")
- second_sub_bg = PictureProcessing("RGB", (self.basic_width * 0.9, 500), self.red_color)
- second_sub_bg = second_sub_bg.radius(value=80, circular_pos=(1, 1, 1, 1))
- _, pp_png_1 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="内里",
- )
- pp_cup = pp_png_1.resize(value=second_sub_bg.width * 0.6)
- second_sub_bg = second_sub_bg.paste_img(top_img=pp_cup, value=(0, 0), base="cc")
- second_bg = second_bg.paste_img(top_img=second_sub_bg, value=(0, 260), base="nc")
- # 图2结束
- basic_bg = PictureProcessing("RGB", (self.basic_width, first_bg.height + second_bg.height - 100),
- (227, 227, 227))
- basic_bg = basic_bg.paste_img(top_img=first_bg, value=(0, 0), base="nc")
- basic_bg = basic_bg.paste_img(top_img=second_bg, value=(0, first_bg.height - 120), base="nc")
- detailed_images.append(basic_bg)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 展示基础信息
- def deal_pic_2(self):
- detailed_images = []
- goods_art_no_list = list(self.data.keys())
- # 区域1
- font_title = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 60) # 颜色名称
- title_text = self.get_text_value("标题三")
- area_1 = PictureProcessing("RGB", (self.basic_width * 0.9, 500), self.red_color)
- area_1 = area_1.radius(value=80, circular_pos=(1, 1, 1, 1))
- _, pp_png_1 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="侧视",
- )
- pp_png_1_copy = pp_png_1
- pp_png_1 = pp_png_1.resize(value=area_1.width * 0.4)
- pp_png_1 = pp_png_1.rotate_advance(doge=40)
- area_1 = area_1.paste_img(top_img=pp_png_1, value=(-100, 20), base="en")
- # 区域1结束
- # 区域2
- area_2 = PictureProcessing("RGB", (self.basic_width * 0.43, 500), self.red_color)
- area_2 = area_2.radius(value=40, circular_pos=(1, 1, 1, 1))
- pp_png_1_copy = pp_png_1_copy.resize(value=area_2.width * 1.1)
- pp_png_1_copy = pp_png_1_copy.rotate_advance(doge=40)
- area_2 = area_2.paste_img(top_img=pp_png_1_copy, value=(-area_2.width * 1.1, 50), base="en")
- # 区域2结束
- # 区域3
- _, pp_png_3 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="后跟",
- )
- area_3 = PictureProcessing("RGB", (self.basic_width * 0.43, area_2.height / 2 - 20), self.red_color)
- area_3 = area_3.radius(value=40, circular_pos=(1, 1, 1, 1))
- pp_png_3 = pp_png_3.resize(value=area_3.width / 1.5)
- area_3 = area_3.paste_img(top_img=pp_png_3, value=(0, 0), base="en")
- # 区域3结束
- # 区域4
- _, pp_png_4 = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="鞋底",
- )
- area_4 = PictureProcessing("RGB", (self.basic_width * 0.43, area_2.height / 2 - 20), self.red_color)
- area_4 = area_4.radius(value=40, circular_pos=(1, 1, 1, 1))
- pp_png_4 = pp_png_4.resize(value=area_4.width / 1.2)
- pp_png_4 = pp_png_4.rotate_advance(doge=36)
- area_4 = area_4.paste_img(top_img=pp_png_4, value=(-40, -80), base="en")
- # 区域4结束
- title_bg = PictureProcessing().get_text_image_advanced(
- font=font_title,
- text=title_text,
- fill=self.black_color,
- return_mode="min_image",
- )
- basic_bg = PictureProcessing("RGB", (self.basic_width, area_1.height + area_2.height + 170), self.white_color)
- basic_bg = basic_bg.radius(value=80, circular_pos=(1, 1, 1, 1))
- basic_bg = basic_bg.paste_img(top_img=area_1, value=(0, 150), base="nc")
- basic_bg = basic_bg.paste_img(top_img=area_2, value=(self.basic_width * 0.05, area_1.height + 170), base="nw")
- basic_bg = basic_bg.paste_img(top_img=area_3, value=(self.basic_width * 0.05, area_1.height + 170), base="en")
- basic_bg = basic_bg.paste_img(top_img=area_4,
- value=(self.basic_width * 0.05, area_1.height + area_3.height + 210), base="en")
- basic_bg = basic_bg.paste_img(top_img=title_bg, value=(self.basic_width * 0.1, 50), base="nw")
- basic_bg = basic_bg.radius(value=80, circular_pos=(1, 1, 0, 0))
- # 文本介绍
- # 介绍卖点
- font_desc = ImageFont.truetype(r"resources\ttf\mi\MiSans-Semibold.ttf", 35) # 颜色名称
- text_list = [
- {
- "text": "细节一",
- "default": "轻盈缓震,健步如飞,久走不累",
- "pos": (self.basic_width * 0.08, 458),
- "base": "nw",
- },
- {
- "text": "细节二",
- "default": "透气网面,干爽舒适,告别闷热",
- "pos": (self.basic_width * 0.08, 1078),
- "base": "nw",
- },
- {
- "text": "细节三",
- "default": "柔韧大底,灵活弯折,自在穿行",
- "pos": (self.basic_width * 0.3, 858),
- "base": "en",
- },
- {
- "text": "细节四",
- "default": "柔韧大底,灵活弯折,自在穿行",
- "pos": (self.basic_width * 0.33, 1118),
- "base": "en",
- },
- ]
- for text_data in text_list:
- text = self.get_text_value(text_data["text"])
- if not text:
- text = text_data["default"]
- temp_pp = PictureProcessing().get_text_image_advanced(
- font=font_desc,
- text=text,
- fill=self.white_color,
- return_mode="min_image",
- )
- basic_bg = basic_bg.paste_img(top_img=temp_pp, value=text_data["pos"], base=text_data["base"])
- hide_basic_bg = PictureProcessing("RGB", (self.basic_width, basic_bg.height),
- self.gray_color)
- hide_basic_bg = hide_basic_bg.paste_img(top_img=basic_bg, value=(0, 0), base="cc")
- detailed_images.append(hide_basic_bg)
- bottom_bg = PictureProcessing("RGB", (self.basic_width, 150), self.white_color)
- small_title = ImageFont.truetype(r"resources\ttf\mi\MiSans-Light.ttf", 20) # 颜色名称
- small_text = "*数据为第三方实验室侧视所得。保温效果因使用环境\n及初始水温可能略有差异,请以实际为准。"
- small_text_bg = PictureProcessing().get_text_image_advanced(
- font=small_title,
- text=small_text,
- fill=self.black_color,
- align="center",
- return_mode="min_image",
- )
- hide_bottom_bg = PictureProcessing("RGB", (self.basic_width, bottom_bg.height + 20),
- self.gray_color)
- bottom_bg = bottom_bg.paste_img(top_img=small_text_bg, value=(0, 0), base="cc")
- bottom_bg = bottom_bg.radius(value=80, circular_pos=(0, 0, 1, 1))
- hide_bottom_bg = hide_bottom_bg.paste_img(top_img=bottom_bg, value=(0, 0), base="nc")
- detailed_images.append(hide_bottom_bg)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 细节展示
- def deal_pic_3(self):
- detailed_images = []
- goods_art_no_list = list(self.data.keys())
- hidden_bg = PictureProcessing("RGB", (self.basic_width, 1140), self.gray_color)
- white_bg = PictureProcessing("RGB", (self.basic_width, hidden_bg.height - 50), self.white_color)
- white_bg = white_bg.radius(value=80, circular_pos=(1, 1, 1, 1))
- red_bg = PictureProcessing(r"{}\2.jpeg".format(self.root))
- red_bg = red_bg.resize(value=white_bg.width * 0.9)
- red_bg = red_bg.resize(value=white_bg.height - 60, base='high')
- # 粘贴
- 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=self.basic_width / 2.3)
- pp_png_1 = pp_png_1.resize(value=self.basic_width / 2.3)
- red_bg = red_bg.to_overlay_pic_advance(top_img=pp_jpg_1, top_png_img=pp_png_1, base="nc", value=(0, 80))
- red_bg = red_bg.radius(value=80, circular_pos=(1, 1, 1, 1))
- font_ml = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 40) # 颜色名称
- circle_bg = PictureProcessing(r"{}\circle.png".format(self.root))
- circle_bg = circle_bg.resize(value=circle_bg.width + 80)
- ml_text = "产品实拍"
- ml_bg = PictureProcessing().get_text_image_advanced(
- font=font_ml,
- text=ml_text,
- fill=self.white_color,
- return_mode="min_image",
- )
- circle_bg = circle_bg.paste_img(top_img=ml_bg, value=(0, 0), base="cc")
- red_bg = red_bg.paste_img(top_img=circle_bg, value=(40, 50), base="nw")
- white_bg = white_bg.paste_img(top_img=red_bg, value=(0, 0), base="cc")
- hidden_bg = hidden_bg.paste_img(top_img=white_bg, value=(0, 0), base="cc")
- # 展示鞋面材质 粘贴内里顶视图
- detailed_images.append(hidden_bg)
- # raise 1
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 展示产品信息和颜色图
- def deal_pic_4(self):
- detailed_images = []
- face = PictureProcessing(r"{}\face.png".format(self.root))
- goods_art_no_list = list(self.data.keys())
- font_1 = ImageFont.truetype(r"resources\ttf\mi\MiSans-Bold.ttf", 60) # 颜色名称
- hidden_bg = PictureProcessing("RGB", (self.basic_width, 950), self.gray_color)
- white_bg = PictureProcessing("RGB", (self.basic_width, hidden_bg.height), self.white_color)
- white_bg = white_bg.radius(value=80, circular_pos=(1, 1, 0, 0))
- red_bg2 = PictureProcessing("RGB", (white_bg.width * 0.9, 800), self.red_color)
- red_bg2 = red_bg2.radius(value=80, circular_pos=(1, 1, 1, 1))
- ml_text = "产品信息"
- ml_bg = PictureProcessing().get_text_image_advanced(
- font=font_1,
- text=ml_text,
- fill=self.black_color,
- return_mode="min_image",
- )
- _, pp_png_fu = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="俯视",
- )
- pp_png_fu = pp_png_fu.resize(value=red_bg2.width * 0.4)
- _, pp_png_ce = self.image_one_pic(return_orign=True,
- goods_art_no=goods_art_no_list[0],
- name="侧视",
- )
- pp_png_ce = pp_png_ce.resize(value=red_bg2.width * 0.4)
- red_bg2 = red_bg2.paste_img(top_img=pp_png_fu, value=(40, 50), base="wc")
- red_bg2 = red_bg2.paste_img(top_img=pp_png_ce, value=(40, 50), base="ec")
- white_bg = white_bg.paste_img(top_img=red_bg2, value=(0, 130), base="nc")
- white_bg = white_bg.paste_img(top_img=face, value=(40, 50), base="en")
- white_bg = white_bg.paste_img(top_img=ml_bg, value=(40, 50), base="nw")
- hidden_bg = hidden_bg.paste_img(top_img=white_bg, value=(0, 0), base="cc")
- detailed_images.append(hidden_bg)
- bottom = PictureProcessing(r"{}\1.jpg".format(self.root))
- detailed_images.append(bottom)
- return PictureProcessing(im=self.add_pic(detailed_images))
- # 添加注意事项
- def deal_pic_5(self):
- detailed_images = []
- detailed_images.append(PictureProcessing(r"{}\19.jpg".format(self.root)))
- detailed_images.append(PictureProcessing(r"{}\20.jpg".format(self.root)))
- return PictureProcessing(im=self.add_pic(detailed_images))
- def copy_view(self, pp_jpg: PictureProcessing, pp_png: PictureProcessing):
- pp_bg_jpg = PictureProcessing("RGB", (1600, 1600), (255, 255, 255))
- pp_bg_png = PictureProcessing("RGBA", (1600, 1600), (255, 255, 255, 0))
- pp_jpg_1_list = [pp_jpg, pp_jpg]
- pp_png_1_list = [pp_png, pp_png]
- x, y = 0, 0
- for index, pp_jpg in enumerate(pp_jpg_1_list):
- pp_bg_jpg = pp_bg_jpg.to_overlay_pic_advance(top_img=pp_jpg,
- value=(x, y))
- x += pp_jpg.width - 20
- x, y = 0, 0
- for index, pp_png in enumerate(pp_png_1_list):
- pp_bg_png = pp_bg_png.paste_img(top_img=pp_png,
- value=(x, y))
- x += pp_jpg.width - 20
- min_bbox = pp_bg_png.getbbox()
- min_bbox = PictureProcessing().expand_bbox(min_bbox, value=50)
- pp_bg_jpg = pp_bg_jpg.crop(bbox=min_bbox)
- pp_bg_png = pp_bg_png.crop(bbox=min_bbox)
- return pp_bg_jpg, pp_bg_png
|