detail_huilima2.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. """
  2. 步骤:
  3. 1、整理需要处理的款号图-输出款号图文件夹
  4. 2、整理所有相关的图片作为素材图
  5. 3、按要求进行拼接
  6. """
  7. import os
  8. from PIL import ImageFont
  9. import sys
  10. import settings
  11. # from module.view_control.generate_goods_no_detail_pic.detail_generate_base import DetailBase
  12. # from module.view_control.generate_goods_no_detail_pic.pic_deal import PictureProcessing
  13. is_test_plugins = False
  14. try:
  15. is_test_plugins = settings.is_test_plugins
  16. except:
  17. is_test_plugins = False
  18. if is_test_plugins:
  19. from custom_plugins.plugins_mode.detail_generate_base import DetailBase
  20. from custom_plugins.plugins_mode.pic_deal import PictureProcessing
  21. else:
  22. from plugins_mode.detail_generate_base import DetailBase
  23. from plugins_mode.pic_deal import PictureProcessing
  24. plugins_name = "详情模板"
  25. company_name_list = ["全部"]
  26. template_name = "huilima-2"
  27. # 皮鞋模板
  28. class DetailPicGet(DetailBase):
  29. need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
  30. root = r"{}\resources\detail_temp\huilima\2".format(os.getcwd())
  31. def __init__(self, goods_no, goods_no_value: dict, out_put_dir, windows=None, test=False, excel_data=None,
  32. assigned_page_list=None, **kwargs):
  33. super().__init__(goods_no, goods_no_value, out_put_dir, windows=windows, excel_data=excel_data,
  34. assigned_page_list=assigned_page_list)
  35. self.template_name = template_name
  36. self.root = r"{}\resources\detail_temp\huilima\2".format(os.getcwd())
  37. print("run huilima-2 ")
  38. self.base_bg_color = (255, 255, 255)
  39. self.deal_pic_func_list = [
  40. self.deal_pic_1,
  41. self.deal_pic_2,
  42. self.deal_pic_3,
  43. self.deal_pic_3_2,
  44. self.deal_pic_3_3,
  45. self.deal_pic_4,
  46. self.deal_pic_5,
  47. self.deal_pic_6,
  48. ]
  49. if test:
  50. self.run_test()
  51. else:
  52. self.run_all()
  53. def run_test(self):
  54. detailed_images = []
  55. detailed_images.append(self.deal_pic_1())
  56. detailed_images.append(self.deal_pic_2())
  57. detailed_images.append(self.deal_pic_3())
  58. detailed_images.append(self.deal_pic_4())
  59. detailed_images.append(self.deal_pic_5())
  60. detailed_images.append(self.deal_pic_6())
  61. img = self.add_pic(detailed_images)
  62. if img:
  63. self.create_folder(r"{}/{}".format(self.out_put_dir, template_name))
  64. img.save(r"{}/{}/{}.jpg".format(self.out_put_dir, template_name, self.goods_no, format="JPEG"))
  65. img.show()
  66. # 斜视图展示
  67. def deal_pic_1(self):
  68. detailed_images = []
  69. pp_bg = PictureProcessing(r"{}\1.jpg".format(self.root))
  70. detailed_images.append(pp_bg)
  71. goods_art_no_list = list(self.data.keys())
  72. # ----粘贴俯视图
  73. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  74. color_name="俯视",
  75. bg_color=self.base_bg_color)
  76. pp_jpg = pp_jpg.resize(value=1098)
  77. pp_jpg = pp_jpg.paste_img_invert(
  78. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  79. base="cc")
  80. detailed_images.append(pp_jpg)
  81. return PictureProcessing(im=self.add_pic(detailed_images))
  82. # 展示设计理念
  83. def deal_pic_2(self):
  84. detailed_images = []
  85. detailed_images.append(PictureProcessing(r"{}\3.jpg".format(self.root)))
  86. detailed_images.append(PictureProcessing(r"{}\4.jpg".format(self.root)))
  87. detailed_images.append(PictureProcessing(r"{}\5.jpg".format(self.root)))
  88. return PictureProcessing(im=self.add_pic(detailed_images))
  89. # 角度展示
  90. def deal_pic_3(self):
  91. detailed_images = []
  92. goods_art_no_list = list(self.data.keys())
  93. # =====添加侧视图
  94. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  95. color_name="侧视",
  96. bg_color=self.base_bg_color)
  97. pp_jpg = pp_jpg.resize(value=1098)
  98. pp_jpg = pp_jpg.paste_img_invert(
  99. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  100. base="cc")
  101. detailed_images.append(pp_jpg)
  102. font_1 = ImageFont.truetype(r"resources\ttf\puhui\Regular.ttf", 48) # 颜色名称
  103. # =====添加鞋面描述
  104. pp_bg_2 = PictureProcessing(r"{}\7.jpg".format(self.root))
  105. text = self.get_text_value("提示1主标题")
  106. if text:
  107. _pp = PictureProcessing().get_text_image_advanced(
  108. font=font_1,
  109. text=text,
  110. fill=(122, 122, 122),
  111. return_mode="min_image",
  112. )
  113. pp_bg_2 = pp_bg_2.paste_img(top_img=_pp, value=(143, 166), base="ne")
  114. detailed_images.append(pp_bg_2)
  115. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  116. color_name="俯视",
  117. bg_color=self.base_bg_color)
  118. pp_jpg = pp_jpg.transpose(mode="left_right")
  119. pp_jpg = pp_jpg.resize(value=2210)
  120. pp_jpg = pp_jpg.paste_img_invert(
  121. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 200), self.base_bg_color),
  122. base="en",
  123. value=(149, 0)
  124. )
  125. detailed_images.append(pp_jpg)
  126. # =====添加内里图
  127. pp_bg_3 = PictureProcessing(r"{}\8.jpg".format(self.root))
  128. text = self.get_text_value("提示2主标题")
  129. if text:
  130. _pp = PictureProcessing().get_text_image_advanced(
  131. font=font_1,
  132. text=text,
  133. fill=(122, 122, 122),
  134. return_mode="min_image",
  135. )
  136. pp_bg_3 = pp_bg_3.paste_img(top_img=_pp, value=(143, 166), base="nw")
  137. detailed_images.append(pp_bg_3)
  138. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  139. color_name="内里",
  140. bg_color=self.base_bg_color)
  141. pp_jpg = pp_jpg.resize(value=2130)
  142. pp_jpg = pp_jpg.paste_img_invert(
  143. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  144. base="wc",
  145. value=(294, 0)
  146. )
  147. detailed_images.append(pp_jpg)
  148. return PictureProcessing(im=self.add_pic(detailed_images))
  149. #模特图
  150. def deal_pic_3_2(self):
  151. if self.get_text_value("模特图"):
  152. mote_img = PictureProcessing(self.get_text_value("模特图"))
  153. mote_img = mote_img.resize(value=1600)
  154. bg_img = PictureProcessing("RGB", (mote_img.width, mote_img.height), (255,255,255))
  155. bg_img = bg_img.paste_img(top_img=mote_img,base="nc", value=(0, 0))
  156. return bg_img
  157. else:
  158. return
  159. #场景图
  160. def deal_pic_3_3(self):
  161. if self.get_text_value("场景图"):
  162. mote_img = PictureProcessing(self.get_text_value("场景图"))
  163. mote_img = mote_img.resize(value=1600)
  164. bg_img = PictureProcessing("RGB", (mote_img.width, mote_img.height), (255,255,255))
  165. bg_img = bg_img.paste_img(top_img=mote_img,base="nc", value=(0, 0))
  166. return bg_img
  167. else:
  168. return
  169. # 展示产品信息和颜色图
  170. def deal_pic_4(self):
  171. detailed_images = []
  172. goods_art_no_list = list(self.data.keys())
  173. # 添加基础信息
  174. font_1 = ImageFont.truetype(r"resources\ttf\puhui\Regular.ttf", 46) # 颜色名称
  175. text_list = [
  176. {"text": "产品名称", "pos": (294, 531)},
  177. {"text": "产地", "pos": (1235, 531)},
  178. {"text": "鞋面材质", "pos": (429, 623)},
  179. {"text": "鞋底材质", "pos": (1235, 623)},
  180. {"text": "设计理念", "pos": (294, 721)},
  181. ]
  182. pp_bg_1 = PictureProcessing(r"{}\9.jpg".format(self.root))
  183. for text_data in text_list:
  184. text = self.get_text_value(text_data["text"])
  185. if text:
  186. _pp = PictureProcessing().get_text_image_advanced(
  187. font=font_1,
  188. text=text,
  189. fill=(136, 136, 136),
  190. return_mode="min_image",
  191. )
  192. pp_bg_1 = pp_bg_1.paste_img(top_img=_pp, value=text_data["pos"])
  193. detailed_images.append(pp_bg_1)
  194. # =======添加各个颜色====多余高度需要剪裁
  195. pp_bg_2 = PictureProcessing(r"{}\8.jpg".format(self.root))
  196. font_2 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 34) # 颜色名称
  197. color_pic_list_1 = []
  198. for goods_art_no_dict in self.goods_no_value["货号资料"]:
  199. color_name = goods_art_no_dict["颜色名称"]
  200. goods_art_no = goods_art_no_dict["货号"]
  201. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no,
  202. color_name="侧视",
  203. bg_color=self.base_bg_color)
  204. pp_jpg = pp_jpg.resize(value=390)
  205. pp_jpg = pp_jpg.paste_img_invert(
  206. top_img=PictureProcessing("RGBA", (pp_jpg.width, pp_jpg.height + 70), (255, 255, 255, 0)),
  207. base="nw"
  208. )
  209. text_image = pp_bg_2.get_text_image_advanced(font=font_2,
  210. text="{} / COLOR".format(color_name),
  211. fill=(0, 0, 0),
  212. return_mode="min_image")
  213. pp_jpg = pp_jpg.paste_img(top_img=text_image, base="sc", value=(0, 10))
  214. color_pic_list_1.append(pp_jpg)
  215. # 颜色列表进行等分展示
  216. all_color_pp = PictureProcessing().horizontal_distribution(color_pic_list_1, bg_width=1114,
  217. line_spacing=10,
  218. number_per_row=2)
  219. all_color_pp = all_color_pp.paste_img_invert(
  220. top_img=PictureProcessing("RGB", (1600, all_color_pp.height + 100), self.base_bg_color),
  221. base="cc",
  222. value=(0, 0))
  223. detailed_images.append(all_color_pp)
  224. return PictureProcessing(im=self.add_pic(detailed_images))
  225. # 产品细节展示
  226. def deal_pic_5(self):
  227. detailed_images = []
  228. detailed_images.append(PictureProcessing(r"{}\12.jpg".format(self.root)))
  229. goods_art_no_list = list(self.data.keys())
  230. view_list = ["侧视", "俯视", "后跟"]
  231. for goods_art_no_dict in self.goods_no_value["货号资料"]:
  232. color_name = goods_art_no_dict["颜色名称"]
  233. goods_art_no = goods_art_no_dict["货号"]
  234. for index, view_name in enumerate(view_list):
  235. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no,
  236. color_name=view_name,
  237. bg_color=self.base_bg_color)
  238. if view_name == "后跟":
  239. pp_jpg = pp_jpg.resize(value=600)
  240. else:
  241. pp_jpg = pp_jpg.resize(value=1202)
  242. pp_jpg = pp_jpg.paste_img_invert(
  243. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  244. base="cc",
  245. value=(0, 0))
  246. detailed_images.append(pp_jpg)
  247. return PictureProcessing(im=self.add_pic(detailed_images))
  248. # 添加注意事项
  249. def deal_pic_6(self):
  250. detailed_images = []
  251. detailed_images.append(PictureProcessing(r"{}\15.jpg".format(self.root)))
  252. detailed_images.append(PictureProcessing(r"{}\16.jpg".format(self.root)))
  253. detailed_images.append(PictureProcessing(r"{}\17.jpg".format(self.root)))
  254. detailed_images.append(PictureProcessing(r"{}\18.jpg".format(self.root)))
  255. return PictureProcessing(im=self.add_pic(detailed_images))