""" 步骤: 1、整理需要处理的款号图-输出款号图文件夹 2、整理所有相关的图片作为素材图 3、按要求进行拼接 """ from ast import mod 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 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-1" class DetailPicGet(DetailBase): need_view = ["俯视", "侧视", "后跟", "鞋底", "内里","组合","组合2","组合3"] root = r"{}\resources\detail_temp\xinnuo\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, ): 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\1".format(os.getcwd()) print("run xinnuo-1 ") 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, self.deal_pic_13, self.deal_pic_14, self.deal_pic_15, self.deal_pic_16, self.deal_pic_17, self.deal_pic_18, self.deal_pic_19, self.deal_pic_20, ] 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()) detailed_images.append(self.deal_pic_13()) detailed_images.append(self.deal_pic_14()) detailed_images.append(self.deal_pic_15()) detailed_images.append(self.deal_pic_16()) detailed_images.append(self.deal_pic_17()) detailed_images.append(self.deal_pic_18()) detailed_images.append(self.deal_pic_19()) detailed_images.append(self.deal_pic_20()) 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)) font_main = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 102) # 设计理念 mainTitle = self.get_text_value("主标题") subTitle = self.get_text_value("副标题") pp_bg.get_text_image_advanced( value=(336, 102), font=font_main, text=mainTitle, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype( r"resources\ttf\puhui\Bold.ttf", 40 ) # 设计理念 pp_bg.get_text_image_advanced( value=(82, 102), font=font_sub, text=subTitle, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) return pp_bg # 展示鞋头和后跟 def deal_pic_2(self): pp_bg = PictureProcessing(r"{}\2.jpg".format(self.root)) font = ImageFont.truetype( r"resources\ttf\puhui\Regular.ttf", 24 ) # 设计理念 design_text = self.get_text_value("设计理念") pp_bg.get_text_image_advanced( value=(226, 359), font=font, text=design_text, align="center", # anchor="ma", spacing=20, fill=(88, 52, 28), return_mode="image", margins=(0, 0, 0, 0), ) return pp_bg # 展示鞋头放大图 def deal_pic_3(self): pp_bg = PictureProcessing(r"{}\3.jpg".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_jpg_1 = pp_jpg_1.resize(value=1600) pp_png_1 = pp_png_1.resize(value=1600) # 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="es", value=(80, 230), top_png_img=pp_png_1, ) 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): pp_bg = PictureProcessing(r"{}\5.jpg".format(self.root)) return pp_bg # "心动"设计亮点,展示旋转的侧视图 def deal_pic_6(self): pp_bg = PictureProcessing(r"{}\6.jpg".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_jpg_1 = pp_jpg_1.resize(value=pp_bg.width/1.4) pp_png_1 = pp_png_1.resize(value=pp_bg.width / 1.4) # 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="center", value=(0, 0), top_png_img=pp_png_1, ) return pp_bg # 产品展示,帮面等等 def deal_pic_7(self): pp_bg = PictureProcessing(r"{}\7.jpg".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_jpg_1 = pp_jpg_1.resize(value=500) pp_png_1 = pp_png_1.resize(value=500) # 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="es", value=(200, 208), 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) # 设计理念 bangmian = self.get_text_value("帮面") neili = self.get_text_value("内里") xiedi = self.get_text_value("鞋底") xiedian = self.get_text_value("鞋垫") xiekuan = self.get_text_value("鞋宽") banggao = self.get_text_value("帮高") gengao = self.get_text_value("跟高") pp_bg.get_text_image_advanced( value=(230, 346), font=font, text=bangmian, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(551, 346), font=font, text=neili, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(230, 456), font=font, text=xiedi, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(551, 456), font=font, text=xiedian, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(64, 901), font=font_hei, text=xiekuan, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(621, 650), font=font_hei, text=banggao, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(621, 752), font=font_hei, text=gengao, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) return pp_bg # 功能展示与卖点 def deal_pic_8(self): detailed_images = [] pp_bg = PictureProcessing(r"{}\7.jpg".format(self.root)) # detailed_images.append(pp_bg) goods_art_no_list = list(self.data.keys()) all_color_name = [] bg_color = (253, 250, 242) text_color = (70, 48, 41) 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 = self.get_overlay_pic_from_dict( goods_art_no=goods_art_no, color_name="侧视", bg_color=bg_color, ) if pp_jpg is None: continue pp_jpg = pp_jpg.resize(value=pp_bg.width/2.5) color_name = self.goods_no_value["货号资料"][index]["颜色名称"] all_color_name.append(color_name) text_bg = PictureProcessing("RGB", (pp_jpg.width, 50), bg_color) text_bg = text_bg.get_text_image_advanced( value=(0, 0), font=font, 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.paste_img(top_img=pp_jpg, base="center") _bg = _bg.paste_img( top_img=text_bg, value=(pp_jpg.width / 2, pp_jpg.height+100) ) 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)) # 添加尺码表 def deal_pic_9(self): image_path = r"{}\9.jpg".format(self.root) return PictureProcessing(image_path) # 角度展示 def deal_pic_10(self): detailed_images = [] # 角度展示标题 detailed_images.append(PictureProcessing(r"{}\10.jpg".format(self.root))) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) # 添加注意事项 def deal_pic_11(self): detailed_images = [] image_path = r"{}\11.jpg".format(self.root) pp_bg = PictureProcessing(image_path) 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=1400) pp_png_1 = pp_png_1.resize(value=1400) pp_bg = pp_bg.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="nw", value=(0, pp_bg.height - pp_jpg_1.height), top_png_img=pp_png_1, ) font_main = ImageFont.truetype( r"resources\ttf\puhui\Medium.ttf", 58 ) # 设计理念 mainTitle = self.get_text_value("细节亮点主标题") subTitle = self.get_text_value("细节亮点副标题") pp_bg.get_text_image_advanced( value=(pp_bg.width/2, 219), font=font_main, text=mainTitle, align="center", anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype(r"resources\ttf\puhui\Light.ttf", 36) # 设计理念 pp_bg.get_text_image_advanced( value=(pp_bg.width / 2, 313), font=font_sub, text=subTitle, align="center", anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) detailed_images.append(pp_bg) bg_12_image_path = r"{}\12.jpg".format(self.root) bg_12 = PictureProcessing(bg_12_image_path) detailed_images.append(bg_12) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_13(self): detailed_images = [] image_path = r"{}\13.jpg".format(self.root) pp_bg = PictureProcessing(image_path) image_path_1 = r"{}\13_1.png".format(self.root) pp_bg_1 = PictureProcessing(image_path_1) font_main = ImageFont.truetype( r"resources\ttf\puhui\Medium.ttf", 58 ) # 设计理念 pp_bg.get_text_image_advanced( value=(pp_bg.width / 2, 168), font=font_main, text="经典系带", align="center", anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype(r"resources\ttf\puhui\Light.ttf", 36) # 设计理念 pp_bg.get_text_image_advanced( value=(pp_bg.width / 2, 261), font=font_sub, text="松紧自由调节", align="center", anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) 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=1500) pp_png_1 = pp_png_1.resize(value=1500) pp_bg = pp_bg.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cs", value=(0, - pp_jpg_1.height/4), top_png_img=pp_png_1, ) pp_bg.paste_img(top_img=pp_bg_1) detailed_images.append(pp_bg) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_14(self): # 场景展示 detailed_images = [] image_path = r"{}\14.jpg".format(self.root) pp_bg_14 = PictureProcessing(image_path) goods_art_no_list = list(self.data.keys()) # print("执行14") pp_jpg_1, pp_png_1 = self.image_one_pic( return_orign=True, goods_art_no=goods_art_no_list[0], name="组合", ) if pp_jpg_1: pp_jpg_1 = pp_jpg_1.resize(value=pp_bg_14.width) pp_png_1 = pp_png_1.resize(value=pp_bg_14.width) pp_bg_14 = pp_bg_14.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cc", value=(0, 0), top_png_img=pp_png_1, ) detailed_images.append(pp_bg_14) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_15(self): detailed_images = [] image_path = r"{}\15.jpg".format(self.root) pp_bg_15 = PictureProcessing(image_path) goods_art_no_list = list(self.data.keys()) print("执行15") pp_jpg_1, pp_png_1 = self.image_one_pic( return_orign=True, goods_art_no=goods_art_no_list[0], name="组合2", ) if pp_jpg_1: pp_jpg_1 = pp_jpg_1.resize(value=pp_bg_15.width) pp_png_1 = pp_png_1.resize(value=pp_bg_15.width) pp_bg_15 = pp_bg_15.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cc", value=(0, 0), top_png_img=pp_png_1, ) detailed_images.append(pp_bg_15) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_16(self): detailed_images = [] image_path = r"{}\16.jpg".format(self.root) pp_bg_16 = PictureProcessing(image_path) goods_art_no_list = list(self.data.keys()) print("执行16") pp_jpg_1, pp_png_1 = self.image_one_pic( return_orign=True, goods_art_no=goods_art_no_list[0], name="组合3", ) if pp_jpg_1: pp_jpg_1 = pp_jpg_1.resize(value=pp_bg_16.width) pp_png_1 = pp_png_1.resize(value=pp_bg_16.width) pp_bg_16 = pp_bg_16.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cc", value=(0, 0), top_png_img=pp_png_1, ) detailed_images.append(pp_bg_16) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_17(self): # 产品细节 image_path = r"{}\17.jpg".format(self.root) image_path_1 = r"{}\17_1.png".format(self.root) detailed_images = [] pp_bg_1 = PictureProcessing(image_path_1) pp_bg = PictureProcessing(image_path) 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+100) pp_png_1 = pp_png_1.resize(value=pp_bg.width + 100) pp_bg = pp_bg.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cs", value=(0, 0), top_png_img=pp_png_1, ) mainTitle = self.get_text_value("艺-主标题") subTitle = self.get_text_value("艺-副标题") font_main = ImageFont.truetype( r"resources\ttf\puhui\Medium.ttf", 30 ) # 设计理念 pp_bg.get_text_image_advanced( value=(113, 545), font=font_main, text=mainTitle, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype(r"resources\ttf\puhui\Light.ttf", 24) # 设计理念 pp_bg.get_text_image_advanced( value=(113, 602), font=font_sub, text=subTitle, align="left", # anchor="ma", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.paste_img(top_img=pp_bg_1) detailed_images.append(pp_bg) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_18(self): image_path = r"{}\18.jpg".format(self.root) image_path_1 = r"{}\18_1.png".format(self.root) detailed_images = [] pp_bg_1 = PictureProcessing(image_path_1) pp_bg = PictureProcessing(image_path) 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=1400) pp_png_1 = pp_png_1.resize(value=1400) pp_bg = pp_bg.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="cs", value=(-pp_jpg_1.width/3, 0), top_png_img=pp_png_1, ) mainTitle = self.get_text_value("跟-主标题") subTitle = self.get_text_value("跟-副标题") gengao = self.get_text_value("跟高") font_main = ImageFont.truetype( r"resources\ttf\puhui\Medium.ttf", 30 ) # 设计理念 pp_bg.get_text_image_advanced( value=(441, 220), font=font_main, text=mainTitle, align="right", # anchor="rs", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype(r"resources\ttf\puhui\Light.ttf", 24) # 设计理念 pp_bg.get_text_image_advanced( value=(441, 272), font=font_sub, text=subTitle, align="right", # anchor="ls", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.get_text_image_advanced( value=(605, 648), font=font_main, text=gengao, align="right", # anchor="ls", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) pp_bg.paste_img(top_img=pp_bg_1) detailed_images.append(pp_bg) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) def deal_pic_19(self): detailed_images = [] image_path = r"{}\19.jpg".format(self.root) pp_bg = PictureProcessing(image_path) # 鞋底 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) pp_png_1 = pp_png_1.resize(value=pp_bg.width) pp_bg = pp_bg.to_overlay_pic_advance( mode="pixel", top_img=pp_jpg_1, base="center", value=(0, 200), top_png_img=pp_png_1, ) mainTitle = self.get_text_value("底-主标题") subTitle = self.get_text_value("底-副标题") font_main = ImageFont.truetype( r"resources\ttf\puhui\Medium.ttf", 30 ) # 设计理念 pp_bg.get_text_image_advanced( value=(114, 259), font=font_main, text=mainTitle, align="left", # anchor="rs", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) font_sub = ImageFont.truetype(r"resources\ttf\puhui\Light.ttf", 24) # 设计理念 pp_bg.get_text_image_advanced( value=(114, 311), font=font_sub, text=subTitle, align="left", # anchor="ls", spacing=5, fill=(60, 40, 29), return_mode="image", margins=(0, 0, 0, 0), ) # return PictureProcessing(image_path) detailed_images.append(pp_bg) return self.pp_pic_subsection(PictureProcessing(im=self.add_pic(detailed_images))) def deal_pic_20(self): detailed_images = [] bg_20 = PictureProcessing(r"{}\20.jpg".format(self.root)) bg_21 = PictureProcessing(r"{}\21.jpg".format(self.root)) bg_22 = PictureProcessing(r"{}\22.jpg".format(self.root)) detailed_images.append(bg_20) detailed_images.append(bg_21) detailed_images.append(bg_22) 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-1", test=True, ) d.run_test()