""" 步骤: 1、整理需要处理的款号图-输出款号图文件夹 2、整理所有相关的图片作为素材图 3、按要求进行拼接 """ import os 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 class DetailPicGetHLM(DetailBase): need_view = ["俯视","侧视","后跟","鞋底"] def __init__(self, goods_no, goods_no_value: dict, out_put_dir, ): super().__init__(goods_no, goods_no_value, out_put_dir) if __name__ == '__main__': self.root = r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo" else: self.root = os.getcwd() self.detailed_images = [] self.run() def run(self): detailed_images = self.deal_details() self.create_folder(self.out_put_dir) detail_path = "{out_put_dir}/{goods_no}/details".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no) self.create_folder(detail_path) join_path = "{out_put_dir}/{goods_no}/拼接图".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no) self.create_folder(join_path) for index, pp in enumerate(detailed_images): pp.im.save("{}/{}({}).jpg".format(detail_path, self.goods_no, str(index + 11).zfill(2)), format="JPEG") img = self.add_pic(detailed_images) # img.show() img.save("{}/1.jpg".format(join_path), format="JPEG") # ------------移动其他图片--------------------- self.move_other_pic() return True def deal_details(self): bg_color = (246, 246, 246) self.image_init(bg_color) 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()) return [x for x in detailed_images if x] def deal_pic_1(self): bg_color = (246, 246, 246) """ 制作主图 """ detailed_images = [] pp_0 = PictureProcessing(r"{}\resources\detail_image_3\image (1).jpg".format(self.root)) detailed_images.append(pp_0) goods_art_no_list = list(self.data.keys()) pp_1 = self.data[goods_art_no_list[0]]["pic_is_deal"]["俯视"] pp_image = pp_1.resize(mode="relative", base="by_im", base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248))) pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img( mode="pixel", top_img=pp_image, base="center" ) bg_img = PictureProcessing("RGB", (1200, 918), (255, 255, 255)).paste_img( mode="pixel", top_img=pp_image, base="nw", value=(26, 26)) # bg_img.show() # ---------- 第二张图粘贴 pp_2 = self.data[goods_art_no_list[0]]["pic_is_deal"]["侧视"] pp_image = pp_2.resize(mode="relative", base="by_im", base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)),) pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img( mode="pixel", top_img=pp_image, base="center" ) bg_img = bg_img.paste_img( mode="pixel", top_img=pp_image, base="nw", value=(26, 26 + 26 + 418)) # -------粘贴文字------- font = ImageFont.truetype(r'resources\ttf\simhei.ttf', 30) text_list = [("商品款号", self.goods_no_value["款号"], 700, 297), ("商品面料", self.goods_no_value["商品面料"], 700, 380), ("商品内里", self.goods_no_value["商品内里"], 700, 469), ("商品鞋底", self.goods_no_value["商品鞋底"], 700, 549), ] for i in text_list: bg_img = bg_img.add_text(mode="pixel", value=(i[2], i[3]), font=font, text="{}:{}".format(i[0], i[1]), align="center", spacing=10, fill=(17, 16, 16)) detailed_images.append(bg_img) return PictureProcessing(im=self.add_pic(detailed_images)) def deal_pic_2(self): # 尺码表 pp_1 = PictureProcessing(r"{}\resources\detail_image_3\image (2).jpg".format(self.root)) return pp_1 def deal_pic_3(self): # 细节图展示 bg_color = (246, 246, 246) detailed_images = [] pp_1 = PictureProcessing(r"{}\resources\detail_image_3\image (3).jpg".format(self.root)) detailed_images.append(pp_1) goods_art_no_list = list(self.data.keys()) view_dict = {"俯视": {"crop_img_value": (0, 0, 1086, 752), "crop_img_base": "sw", "paste_img_value": (0, 0), "paste_img_base": "center", }, "侧视": {"crop_img_value": (0, 0, 1086, 752), "crop_img_base": "sw", "paste_img_value": (0, 0), "paste_img_base": "center", }, } for index, goods_art_no in enumerate(goods_art_no_list): if index == 0: name_list = ["俯视", "侧视", "后跟", "鞋底"] else: name_list = ["俯视", "侧视", ] for _name in name_list: # 处理图片,需要粘贴到背景等处理 if _name not in self.data[goods_art_no]["pic_is_deal"]: continue _pp = self.data[goods_art_no]["pic_is_deal"][_name] _pp = _pp.resize(mode="pixel", base="width", value=1800 if _name != "后跟" else 1200,) if _name in view_dict: value = view_dict[_name]["crop_img_value"] else: value = (0, 0, 1086, 752) _pp = _pp.crop_img(mode="pixel", base="cc", value=value, color_fill=bg_color) # _pp.show() _pp = _pp.radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100) bg_img = PictureProcessing("RGBA", (1200, 848), (255,255,255)) bg_img = bg_img.paste_img(mode="pixel", top_img=_pp, base="center") detailed_images.append(bg_img) return PictureProcessing(im=self.add_pic(detailed_images)) def deal_pic_4(self): # 制作角度展示图 bg_color = (246, 246, 246) detailed_images = [] goods_art_no_list = list(self.data.keys()) for index, goods_art_no in enumerate(goods_art_no_list): if index == 0: name_list = ["俯视", "侧视", "后跟", "鞋底"] else: name_list = ["俯视", ] for _name in name_list: # 处理图片,需要粘贴到背景等处理 if _name not in self.data[goods_art_no]["pic_is_deal"]: continue _pp = self.data[goods_art_no]["pic_is_deal"][_name] _pp = _pp.resize(mode="pixel", base="width", value=600 if _name == "后跟" else 1058, ) bg_pp = PictureProcessing("RGB", (1200, int(_pp.height + 50)), bg_color) bg_pp = bg_pp.paste_img(mode="pixel", top_img=_pp, base="cc", value=(0, 0)) detailed_images.append(bg_pp) # 分割线 _p = PictureProcessing("RGB", (1200, 50), (255, 255, 255)) detailed_images.append(_p) return PictureProcessing(im=self.add_pic(detailed_images)) if __name__ == '__main__': import json with open( r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo\qt_test\data2.txt", "r", encoding="utf-8") as f: data = json.loads(f.read()) n = 0 for goods_no, value in data.items(): n+=1 if n != 1111: d = DetailPicGetHLM(goods_no, value, out_put_dir=r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo\out_put\测试文件夹\详情图生成") raise 1