""" 步骤: 1、整理需要处理的款号图-输出款号图文件夹 2、整理所有相关的图片作为素材图 3、按要求进行拼接 """ import os from PIL import ImageFont, ImageDraw import sys import settings # from PIL import Image, ImageDraw, 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 = "xinjunlue-1" # 乐福鞋 详情页 class DetailPicGet(DetailBase): need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"] root = r"{}\resources\detail_temp\zhudi\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, output_queue=None, **kwargs ): super().__init__( goods_no, goods_no_value, out_put_dir, windows=windows, excel_data=excel_data, assigned_page_list=assigned_page_list, output_queue=output_queue, ) self.template_name = template_name self.root = r"{}\resources\detail_temp\zhudi\1".format(os.getcwd()) print(f"run {template_name} ") self.base_bg_color = (255, 255, 255) self.deal_pic_func_list = [ self.deal_pic_1, ] if test: self.run_test() else: self.run_all() def run_test(self): detailed_images = [] detailed_images.append(self.deal_pic_1()) img = self.add_pic(detailed_images) if img: self.create_folder(r"{}/{}".format(self.out_put_dir, template_name)) # print("保存图片成功", img.show()) 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 = [] base_bg_width = 1200 base_limit_width = base_bg_width / 2 font = ImageFont.truetype("msyh.ttc", 20) dataList = ["款号", "面料", "内里", "垫脚", "大底", "饰扣", "客户", "日期"] height_total = 0 text_list = [] line_space = 15 for idx, item in enumerate(dataList): info = self.get_text_value(item) if info == None or info == "": continue _pp = PictureProcessing() text = f"{item}: {self.get_text_value(item)}" duanluo = "" sum_width = 0 line_count = 0 for char in text: text_width = font.getlength(char) sum_width += text_width if sum_width > base_limit_width: # 超过预设宽度就修改段落 以及当前行数 line_count += 1 sum_width = 0 duanluo += '\n' duanluo += char _pp = _pp.get_text_image_advanced( font=font, text=duanluo, spacing=10, fill=(0, 0, 0), return_mode="min_image_high", ) height_total += _pp.height + line_space text_list.append(_pp) pp_bg_jpg = PictureProcessing( "RGB", (base_bg_width, height_total), (255, 255, 255) ) goods_art_no_list = list(self.data.keys()) current_y = 0 for index, text_item in enumerate(text_list): pp_bg_jpg = pp_bg_jpg.paste_img(top_img=text_item, value=(10, current_y)) # 更新 Y 坐标为当前项的底部位置 current_y += text_item.height + line_space pp_jpg, pp_png = self.image_one_pic( return_orign=True, goods_art_no=goods_art_no_list[0], name="俯视", ) pp_png = pp_png.resize(value=base_limit_width) background_size = 0 if pp_png.height > pp_bg_jpg.height: background_size = pp_png.height+100 else: background_size = pp_bg_jpg.height + 100 pp_image_jpg = PictureProcessing( "RGB", (base_bg_width, background_size), (255, 255, 255) ) pp_image_jpg.paste_img(top_img=pp_bg_jpg, base="wc", value=(0, 0)) pp_image_jpg.paste_img(top_img=pp_png, base="ec", value=(0, 0)) detailed_images.append(pp_image_jpg) return PictureProcessing(im=self.add_pic(detailed_images)) def deal_pic_1(self): detailed_images = [] base_bg_width = 1200 base_limit_width = base_bg_width / 2 font = ImageFont.truetype("msyh.ttc", 20) dataList = ["款号", "面料", "内里", "垫脚", "大底", "饰扣", "客户", "日期"] height_total = 0 text_list = [] line_space = 15 for idx, item in enumerate(dataList): info = self.get_text_value(item) if info == None or info == "": continue _pp = PictureProcessing() text = f"{item}: {self.get_text_value(item)}" duanluo = "" sum_width = 0 line_count = 0 for char in text: text_width = font.getlength(char) sum_width += text_width if sum_width > base_limit_width: # 超过预设宽度就修改段落 以及当前行数 line_count += 1 sum_width = 0 duanluo += "\n" duanluo += char _pp = _pp.get_text_image_advanced( font=font, text=duanluo, spacing=10, fill=(0, 0, 0), return_mode="min_image_high", ) height_total += _pp.height + line_space text_list.append(_pp) pp_bg_jpg = PictureProcessing( "RGB", (base_bg_width, height_total), (255, 255, 255) ) goods_art_no_list = list(self.data.keys()) current_y = 0 for index, text_item in enumerate(text_list): pp_bg_jpg = pp_bg_jpg.paste_img(top_img=text_item, value=(20, current_y)) # 更新 Y 坐标为当前项的底部位置 current_y += text_item.height + line_space pp_jpg, pp_png = self.image_one_pic( return_orign=True, goods_art_no=goods_art_no_list[0], name="俯视", ) pp_png = pp_png.resize(value=base_limit_width) background_size = 0 if pp_png.height > pp_bg_jpg.height: background_size = pp_png.height + 100 else: background_size = pp_bg_jpg.height + 100 pp_image_jpg = PictureProcessing( "RGB", (base_bg_width, background_size), (255, 255, 255) ) pp_image_jpg.paste_img(top_img=pp_bg_jpg, base="wc", value=(0, 0)) pp_image_jpg.paste_img(top_img=pp_png, base="ec", value=(0, 0)) detailed_images.append(pp_image_jpg) return PictureProcessing(im=self.add_pic(detailed_images))