""" 步骤: 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 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 = ["俯视", "侧视", "后跟", "鞋底", "内里"] 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_12, 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_12()) # 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="ne", value=(100, 0), 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="ne", value=(200, 578), 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 = [] detailed_images.append(PictureProcessing(r"{}\8.jpg".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"{}\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))) # # 添加颜色名称字体 # 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)) return self.pp_pic_subsection( PictureProcessing(im=self.add_pic(detailed_images)) ) # 添加注意事项 def deal_pic_11(self): image_path = r"{}\11.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_12(self): image_path = r"{}\12.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_13(self): image_path = r"{}\13.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_14(self): image_path = r"{}\14.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_15(self): image_path = r"{}\15.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_16(self): image_path = r"{}\16.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_17(self): image_path = r"{}\17.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_18(self): image_path = r"{}\18.jpg".format(self.root) return PictureProcessing(image_path) def deal_pic_19(self): image_path = r"{}\19.jpg".format(self.root) return PictureProcessing(image_path) 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()