detail_hlm.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. """
  2. 步骤:
  3. 1、整理需要处理的款号图-输出款号图文件夹
  4. 2、整理所有相关的图片作为素材图
  5. 3、按要求进行拼接
  6. """
  7. import os
  8. from PIL import ImageFont
  9. from module.view_control.generate_goods_no_detail_pic.detail_generate_base import DetailBase
  10. from module.view_control.generate_goods_no_detail_pic.pic_deal import PictureProcessing
  11. class DetailPicGetHLM(DetailBase):
  12. need_view = ["俯视","侧视","后跟","鞋底"]
  13. def __init__(self, goods_no, goods_no_value: dict, out_put_dir, ):
  14. super().__init__(goods_no, goods_no_value, out_put_dir)
  15. if __name__ == '__main__':
  16. self.root = r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo"
  17. else:
  18. self.root = os.getcwd()
  19. self.detailed_images = []
  20. self.run()
  21. def run(self):
  22. detailed_images = self.deal_details()
  23. self.create_folder(self.out_put_dir)
  24. detail_path = "{out_put_dir}/{goods_no}/details".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no)
  25. self.create_folder(detail_path)
  26. join_path = "{out_put_dir}/{goods_no}/拼接图".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no)
  27. self.create_folder(join_path)
  28. for index, pp in enumerate(detailed_images):
  29. pp.im.save("{}/{}({}).jpg".format(detail_path, self.goods_no, str(index + 11).zfill(2)), format="JPEG")
  30. img = self.add_pic(detailed_images)
  31. # img.show()
  32. img.save("{}/1.jpg".format(join_path), format="JPEG")
  33. # ------------移动其他图片---------------------
  34. self.move_other_pic()
  35. return True
  36. def deal_details(self):
  37. bg_color = (246, 246, 246)
  38. self.image_init(bg_color)
  39. detailed_images = []
  40. detailed_images.append(self.deal_pic_1())
  41. detailed_images.append(self.deal_pic_2())
  42. detailed_images.append(self.deal_pic_3())
  43. detailed_images.append(self.deal_pic_4())
  44. return [x for x in detailed_images if x]
  45. def deal_pic_1(self):
  46. bg_color = (246, 246, 246)
  47. """ 制作主图 """
  48. detailed_images = []
  49. pp_0 = PictureProcessing(r"{}\resources\detail_image_3\image (1).jpg".format(self.root))
  50. detailed_images.append(pp_0)
  51. goods_art_no_list = list(self.data.keys())
  52. pp_1 = self.data[goods_art_no_list[0]]["pic_is_deal"]["俯视"]
  53. pp_image = pp_1.resize(mode="relative",
  54. base="by_im",
  55. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)))
  56. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  57. mode="pixel", top_img=pp_image, base="center"
  58. )
  59. bg_img = PictureProcessing("RGB", (1200, 918), (255, 255, 255)).paste_img(
  60. mode="pixel", top_img=pp_image, base="nw", value=(26, 26))
  61. # bg_img.show()
  62. # ---------- 第二张图粘贴
  63. pp_2 = self.data[goods_art_no_list[0]]["pic_is_deal"]["侧视"]
  64. pp_image = pp_2.resize(mode="relative",
  65. base="by_im",
  66. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)),)
  67. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  68. mode="pixel", top_img=pp_image, base="center"
  69. )
  70. bg_img = bg_img.paste_img(
  71. mode="pixel", top_img=pp_image, base="nw", value=(26, 26 + 26 + 418))
  72. # -------粘贴文字-------
  73. font = ImageFont.truetype(r'resources\ttf\simhei.ttf', 30)
  74. text_list = [("商品款号", self.goods_no_value["款号"], 700, 297),
  75. ("商品面料", self.goods_no_value["商品面料"], 700, 380),
  76. ("商品内里", self.goods_no_value["商品内里"], 700, 469),
  77. ("商品鞋底", self.goods_no_value["商品鞋底"], 700, 549), ]
  78. for i in text_list:
  79. bg_img = bg_img.add_text(mode="pixel",
  80. value=(i[2], i[3]),
  81. font=font,
  82. text="{}:{}".format(i[0], i[1]),
  83. align="center",
  84. spacing=10,
  85. fill=(17, 16, 16))
  86. detailed_images.append(bg_img)
  87. return PictureProcessing(im=self.add_pic(detailed_images))
  88. def deal_pic_2(self):
  89. # 尺码表
  90. pp_1 = PictureProcessing(r"{}\resources\detail_image_3\image (2).jpg".format(self.root))
  91. return pp_1
  92. def deal_pic_3(self):
  93. # 细节图展示
  94. bg_color = (246, 246, 246)
  95. detailed_images = []
  96. pp_1 = PictureProcessing(r"{}\resources\detail_image_3\image (3).jpg".format(self.root))
  97. detailed_images.append(pp_1)
  98. goods_art_no_list = list(self.data.keys())
  99. view_dict = {"俯视": {"crop_img_value": (0, 0, 1086, 752),
  100. "crop_img_base": "sw",
  101. "paste_img_value": (0, 0),
  102. "paste_img_base": "center",
  103. },
  104. "侧视": {"crop_img_value": (0, 0, 1086, 752),
  105. "crop_img_base": "sw",
  106. "paste_img_value": (0, 0),
  107. "paste_img_base": "center",
  108. },
  109. }
  110. for index, goods_art_no in enumerate(goods_art_no_list):
  111. if index == 0:
  112. name_list = ["俯视", "侧视", "后跟", "鞋底"]
  113. else:
  114. name_list = ["俯视", "侧视", ]
  115. for _name in name_list:
  116. # 处理图片,需要粘贴到背景等处理
  117. if _name not in self.data[goods_art_no]["pic_is_deal"]:
  118. continue
  119. _pp = self.data[goods_art_no]["pic_is_deal"][_name]
  120. _pp = _pp.resize(mode="pixel", base="width", value=1800 if _name != "后跟" else 1200,)
  121. if _name in view_dict:
  122. value = view_dict[_name]["crop_img_value"]
  123. else:
  124. value = (0, 0, 1086, 752)
  125. _pp = _pp.crop_img(mode="pixel", base="cc", value=value, color_fill=bg_color)
  126. # _pp.show()
  127. _pp = _pp.radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  128. bg_img = PictureProcessing("RGBA", (1200, 848), (255,255,255))
  129. bg_img = bg_img.paste_img(mode="pixel", top_img=_pp, base="center")
  130. detailed_images.append(bg_img)
  131. return PictureProcessing(im=self.add_pic(detailed_images))
  132. def deal_pic_4(self):
  133. # 制作角度展示图
  134. bg_color = (246, 246, 246)
  135. detailed_images = []
  136. goods_art_no_list = list(self.data.keys())
  137. for index, goods_art_no in enumerate(goods_art_no_list):
  138. if index == 0:
  139. name_list = ["俯视", "侧视", "后跟", "鞋底"]
  140. else:
  141. name_list = ["俯视", ]
  142. for _name in name_list:
  143. # 处理图片,需要粘贴到背景等处理
  144. if _name not in self.data[goods_art_no]["pic_is_deal"]:
  145. continue
  146. _pp = self.data[goods_art_no]["pic_is_deal"][_name]
  147. _pp = _pp.resize(mode="pixel", base="width", value=600 if _name == "后跟" else 1058, )
  148. bg_pp = PictureProcessing("RGB", (1200, int(_pp.height + 50)), bg_color)
  149. bg_pp = bg_pp.paste_img(mode="pixel", top_img=_pp, base="cc", value=(0, 0))
  150. detailed_images.append(bg_pp)
  151. # 分割线
  152. _p = PictureProcessing("RGB", (1200, 50), (255, 255, 255))
  153. detailed_images.append(_p)
  154. return PictureProcessing(im=self.add_pic(detailed_images))
  155. if __name__ == '__main__':
  156. import json
  157. with open(
  158. r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo\qt_test\data2.txt",
  159. "r", encoding="utf-8") as f:
  160. data = json.loads(f.read())
  161. n = 0
  162. for goods_no, value in data.items():
  163. n+=1
  164. if n != 1111:
  165. d = DetailPicGetHLM(goods_no, value, out_put_dir=r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo\out_put\测试文件夹\详情图生成")
  166. raise 1