detail_hlm_3.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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 DetailPicGetHLM3(DetailBase):
  12. need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
  13. root = r"{}\resources\detail_temp\huilima\1".format(os.getcwd())
  14. def __init__(self, goods_no, goods_no_value: dict, out_put_dir, windows=None, test=False, excel_data=None,
  15. assigned_page_list=None,**kwargs):
  16. super().__init__(goods_no, goods_no_value, out_put_dir,windows=windows)
  17. self.root = r"{}\resources\detail_temp\huilima\1".format(os.getcwd())
  18. self.run()
  19. def run(self):
  20. detailed_images = self.deal_details()
  21. self.create_folder(self.out_put_dir)
  22. detail_path = "{out_put_dir}/{goods_no}/details".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no)
  23. self.create_folder(detail_path)
  24. join_path = "{out_put_dir}/{goods_no}/拼接图".format(out_put_dir=self.out_put_dir, goods_no=self.goods_no)
  25. self.create_folder(join_path)
  26. for index, pp in enumerate(detailed_images):
  27. pp.im.save("{}/{}({}).jpg".format(detail_path, self.goods_no, str(index + 11).zfill(2)), format="JPEG")
  28. img = self.add_pic(detailed_images)
  29. # img.show()
  30. img.save("{}/1.jpg".format(join_path), format="JPEG")
  31. # ------------移动其他图片---------------------
  32. self.move_other_pic()
  33. return True
  34. def deal_details(self):
  35. bg_color = (246, 246, 246)
  36. self.image_init(bg_color)
  37. detailed_images = []
  38. detailed_images.append(self.deal_pic_1())
  39. # detailed_images.append(self.deal_pic_2())
  40. # detailed_images.append(self.deal_pic_3())
  41. # detailed_images.append(self.deal_pic_4())
  42. # detailed_images.append(self.deal_pic_5())
  43. return [x for x in detailed_images if x]
  44. def deal_pic_1(self):
  45. bg_color = (255, 255, 255)
  46. goods_art_no_list = list(self.data.keys())
  47. page_width = 1200
  48. baseWidth = page_width / 1.4
  49. pp_list_1 = []
  50. for index, goods_art_no in enumerate(goods_art_no_list):
  51. pp_jpg1, pp_png1 = self.image_one_pic(
  52. goods_art_no=goods_art_no, name="俯视", return_orign=True
  53. )
  54. pp_jpg1 = pp_jpg1.resize(value=baseWidth)
  55. pp_png1 = pp_png1.resize(value=baseWidth)
  56. maxHeight = pp_jpg1.height
  57. overlay_bg1 = PictureProcessing(
  58. "RGB",
  59. (
  60. pp_jpg1.width,
  61. maxHeight,
  62. ),
  63. bg_color,
  64. )
  65. overlay_bg1 = overlay_bg1.to_overlay_pic_advance(
  66. mode="pixel",
  67. top_img=pp_jpg1,
  68. base="cc",
  69. value=(0, 0),
  70. top_png_img=pp_png1,
  71. )
  72. pp_list_1.append(overlay_bg1)
  73. _pp_jpg = PictureProcessing()
  74. rows = 1
  75. _pp_jpg = _pp_jpg.horizontal_distribution(
  76. pp_list=pp_list_1,
  77. bg_width=page_width,
  78. margins=(0, 0, 0, 0),
  79. line_spacing=100,
  80. number_per_row=rows,
  81. )
  82. overlay_top = PictureProcessing(
  83. "RGB",
  84. (
  85. page_width,
  86. 100,
  87. ),
  88. (255, 255, 255),
  89. )
  90. overlay_bottom = PictureProcessing(
  91. "RGB",
  92. (
  93. page_width,
  94. 100,
  95. ),
  96. (255, 255, 255),
  97. )
  98. detailed_images = []
  99. # 其他图片
  100. detailed_images.append(overlay_top)
  101. detailed_images.append(_pp_jpg)
  102. detailed_images.append(overlay_bottom)
  103. return PictureProcessing(im=self.add_pic(detailed_images))
  104. def deal_pic_2(self):
  105. # 尺码表
  106. pp_1 = PictureProcessing(r"{}\image (2).jpg".format(self.root))
  107. return pp_1
  108. def deal_pic_3(self):
  109. # 细节图展示
  110. bg_color = (246, 246, 246)
  111. detailed_images = []
  112. goods_art_no_list = list(self.data.keys())
  113. view_dict = {"俯视": {"crop_img_value": (-77, 401, 1086, 752),
  114. "crop_img_base": "sw",
  115. "paste_img_value": (0, 0),
  116. "paste_img_base": "center",
  117. },
  118. "侧视": {"crop_img_value": (0, 0, 1086, 752),
  119. "crop_img_base": "sw",
  120. "paste_img_value": (0, 0),
  121. "paste_img_base": "center",
  122. },
  123. }
  124. for index, goods_art_no in enumerate(goods_art_no_list):
  125. if index == 0:
  126. name_list = ["俯视", "侧视", "鞋底", "内里"]
  127. else:
  128. name_list = ["俯视", "侧视", ]
  129. # 第一个颜色
  130. if "俯视" in name_list:
  131. _pp = self.image_one_pic(goods_art_no, "俯视", bg_color=bg_color)
  132. if _pp is None:
  133. continue
  134. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  135. _pp = (_pp.resize(value=1900)
  136. .crop_img(mode="pixel", base="sw", value=(-77, 0, 1086, 752), color_fill=bg_color)
  137. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  138. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  139. )
  140. detailed_images.append(_pp)
  141. if "侧视" in name_list:
  142. _pp = self.image_one_pic(goods_art_no, "侧视", bg_color=bg_color)
  143. if _pp is None:
  144. continue
  145. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  146. _pp = (_pp.resize(value=1733)
  147. .crop_img(mode="pixel", base="wc", value=(715, 0, 1086, 752), color_fill=bg_color)
  148. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  149. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  150. )
  151. detailed_images.append(_pp)
  152. if "鞋底" in name_list:
  153. _pp = self.image_one_pic(goods_art_no, "鞋底", bg_color=bg_color)
  154. if _pp is None:
  155. continue
  156. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  157. _pp = (_pp.resize(value=1733)
  158. .crop_img(mode="pixel", base="wc", value=(715, 0, 1086, 752), color_fill=bg_color)
  159. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  160. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  161. )
  162. detailed_images.append(_pp)
  163. if "内里" in name_list:
  164. _pp = self.image_one_pic(goods_art_no, "内里", bg_color=bg_color)
  165. if _pp is None:
  166. continue
  167. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  168. _pp = (_pp.resize(value=1663)
  169. .crop_img(mode="pixel", base="wc", value=(-40, 0, 1086, 752), color_fill=bg_color)
  170. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  171. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  172. )
  173. detailed_images.append(_pp)
  174. return PictureProcessing(im=self.add_pic(detailed_images))
  175. def deal_pic_4(self):
  176. # 制作角度展示图
  177. bg_color = (246, 246, 246)
  178. detailed_images = []
  179. goods_art_no_list = list(self.data.keys())
  180. for index, goods_art_no in enumerate(goods_art_no_list):
  181. if index == 0:
  182. name_list = ["俯视", "侧视", "后跟", "鞋底"]
  183. else:
  184. name_list = ["俯视", ]
  185. for _name in name_list:
  186. # 处理图片,需要粘贴到背景等处理
  187. if _name not in self.data[goods_art_no]["pic_is_deal"]:
  188. continue
  189. _pp = self.data[goods_art_no]["pic_is_deal"][_name]
  190. _pp = _pp.resize(mode="pixel", base="width", value=600 if _name == "后跟" else 1058, )
  191. bg_pp = PictureProcessing("RGB", (1200, int(_pp.height + 50)), bg_color)
  192. bg_pp = bg_pp.paste_img(mode="pixel", top_img=_pp, base="cc", value=(0, 0))
  193. detailed_images.append(bg_pp)
  194. # 分割线
  195. _p = PictureProcessing("RGB", (1200, 50), (255, 255, 255))
  196. detailed_images.append(_p)
  197. return PictureProcessing(im=self.add_pic(detailed_images))
  198. def deal_pic_5(self):
  199. return PictureProcessing(r"{}\image (3).jpg".format(self.root))