detail_huilima2.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  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_4,
  44. self.deal_pic_5,
  45. self.deal_pic_6,
  46. ]
  47. if test:
  48. self.run_test()
  49. else:
  50. self.run_all()
  51. def run_test(self):
  52. detailed_images = []
  53. detailed_images.append(self.deal_pic_1())
  54. detailed_images.append(self.deal_pic_2())
  55. detailed_images.append(self.deal_pic_3())
  56. detailed_images.append(self.deal_pic_4())
  57. detailed_images.append(self.deal_pic_5())
  58. detailed_images.append(self.deal_pic_6())
  59. img = self.add_pic(detailed_images)
  60. if img:
  61. self.create_folder(r"{}/{}".format(self.out_put_dir, template_name))
  62. img.save(r"{}/{}/{}.jpg".format(self.out_put_dir, template_name, self.goods_no, format="JPEG"))
  63. img.show()
  64. # 斜视图展示
  65. def deal_pic_1(self):
  66. detailed_images = []
  67. pp_bg = PictureProcessing(r"{}\1.jpg".format(self.root))
  68. detailed_images.append(pp_bg)
  69. goods_art_no_list = list(self.data.keys())
  70. # ----粘贴俯视图
  71. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  72. color_name="俯视",
  73. bg_color=self.base_bg_color)
  74. pp_jpg = pp_jpg.resize(value=1098)
  75. pp_jpg = pp_jpg.paste_img_invert(
  76. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  77. base="cc")
  78. detailed_images.append(pp_jpg)
  79. return PictureProcessing(im=self.add_pic(detailed_images))
  80. # 展示设计理念
  81. def deal_pic_2(self):
  82. detailed_images = []
  83. detailed_images.append(PictureProcessing(r"{}\3.jpg".format(self.root)))
  84. detailed_images.append(PictureProcessing(r"{}\4.jpg".format(self.root)))
  85. detailed_images.append(PictureProcessing(r"{}\5.jpg".format(self.root)))
  86. return PictureProcessing(im=self.add_pic(detailed_images))
  87. # 角度展示
  88. def deal_pic_3(self):
  89. detailed_images = []
  90. goods_art_no_list = list(self.data.keys())
  91. # =====添加侧视图
  92. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  93. color_name="侧视",
  94. bg_color=self.base_bg_color)
  95. pp_jpg = pp_jpg.resize(value=1098)
  96. pp_jpg = pp_jpg.paste_img_invert(
  97. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  98. base="cc")
  99. detailed_images.append(pp_jpg)
  100. font_1 = ImageFont.truetype(r"resources\ttf\puhui\Regular.ttf", 48) # 颜色名称
  101. # =====添加鞋面描述
  102. pp_bg_2 = PictureProcessing(r"{}\7.jpg".format(self.root))
  103. text = self.get_text_value("提示1主标题")
  104. if text:
  105. _pp = PictureProcessing().get_text_image_advanced(
  106. font=font_1,
  107. text=text,
  108. fill=(122, 122, 122),
  109. return_mode="min_image",
  110. )
  111. pp_bg_2 = pp_bg_2.paste_img(top_img=_pp, value=(143, 166), base="ne")
  112. detailed_images.append(pp_bg_2)
  113. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  114. color_name="俯视",
  115. bg_color=self.base_bg_color)
  116. pp_jpg = pp_jpg.transpose(mode="left_right")
  117. pp_jpg = pp_jpg.resize(value=2210)
  118. pp_jpg = pp_jpg.paste_img_invert(
  119. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 200), self.base_bg_color),
  120. base="en",
  121. value=(149, 0)
  122. )
  123. detailed_images.append(pp_jpg)
  124. # =====添加内里图
  125. pp_bg_3 = PictureProcessing(r"{}\8.jpg".format(self.root))
  126. text = self.get_text_value("提示2主标题")
  127. if text:
  128. _pp = PictureProcessing().get_text_image_advanced(
  129. font=font_1,
  130. text=text,
  131. fill=(122, 122, 122),
  132. return_mode="min_image",
  133. )
  134. pp_bg_3 = pp_bg_3.paste_img(top_img=_pp, value=(143, 166), base="nw")
  135. detailed_images.append(pp_bg_3)
  136. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no_list[0],
  137. color_name="内里",
  138. bg_color=self.base_bg_color)
  139. pp_jpg = pp_jpg.resize(value=2130)
  140. pp_jpg = pp_jpg.paste_img_invert(
  141. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  142. base="wc",
  143. value=(294, 0)
  144. )
  145. detailed_images.append(pp_jpg)
  146. return PictureProcessing(im=self.add_pic(detailed_images))
  147. # 展示产品信息和颜色图
  148. def deal_pic_4(self):
  149. detailed_images = []
  150. goods_art_no_list = list(self.data.keys())
  151. # 添加基础信息
  152. font_1 = ImageFont.truetype(r"resources\ttf\puhui\Regular.ttf", 46) # 颜色名称
  153. text_list = [
  154. {"text": "产品名称", "pos": (294, 531)},
  155. {"text": "产地", "pos": (1235, 531)},
  156. {"text": "鞋面材质", "pos": (429, 623)},
  157. {"text": "鞋底材质", "pos": (1235, 623)},
  158. {"text": "设计理念", "pos": (294, 721)},
  159. ]
  160. pp_bg_1 = PictureProcessing(r"{}\9.jpg".format(self.root))
  161. for text_data in text_list:
  162. text = self.get_text_value(text_data["text"])
  163. if text:
  164. _pp = PictureProcessing().get_text_image_advanced(
  165. font=font_1,
  166. text=text,
  167. fill=(136, 136, 136),
  168. return_mode="min_image",
  169. )
  170. pp_bg_1 = pp_bg_1.paste_img(top_img=_pp, value=text_data["pos"])
  171. detailed_images.append(pp_bg_1)
  172. # =======添加各个颜色====多余高度需要剪裁
  173. pp_bg_2 = PictureProcessing(r"{}\8.jpg".format(self.root))
  174. font_2 = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 34) # 颜色名称
  175. color_pic_list_1 = []
  176. for goods_art_no_dict in self.goods_no_value["货号资料"]:
  177. color_name = goods_art_no_dict["颜色名称"]
  178. goods_art_no = goods_art_no_dict["货号"]
  179. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no,
  180. color_name="侧视",
  181. bg_color=self.base_bg_color)
  182. pp_jpg = pp_jpg.resize(value=390)
  183. pp_jpg = pp_jpg.paste_img_invert(
  184. top_img=PictureProcessing("RGBA", (pp_jpg.width, pp_jpg.height + 70), (255, 255, 255, 0)),
  185. base="nw"
  186. )
  187. text_image = pp_bg_2.get_text_image_advanced(font=font_2,
  188. text="{} / COLOR".format(color_name),
  189. fill=(0, 0, 0),
  190. return_mode="min_image")
  191. pp_jpg = pp_jpg.paste_img(top_img=text_image, base="sc", value=(0, 10))
  192. color_pic_list_1.append(pp_jpg)
  193. # 颜色列表进行等分展示
  194. all_color_pp = PictureProcessing().horizontal_distribution(color_pic_list_1, bg_width=1114,
  195. line_spacing=10,
  196. number_per_row=2)
  197. all_color_pp = all_color_pp.paste_img_invert(
  198. top_img=PictureProcessing("RGB", (1600, all_color_pp.height + 100), self.base_bg_color),
  199. base="cc",
  200. value=(0, 0))
  201. detailed_images.append(all_color_pp)
  202. return PictureProcessing(im=self.add_pic(detailed_images))
  203. # 产品细节展示
  204. def deal_pic_5(self):
  205. detailed_images = []
  206. detailed_images.append(PictureProcessing(r"{}\12.jpg".format(self.root)))
  207. goods_art_no_list = list(self.data.keys())
  208. view_list = ["侧视", "俯视", "后跟"]
  209. for goods_art_no_dict in self.goods_no_value["货号资料"]:
  210. color_name = goods_art_no_dict["颜色名称"]
  211. goods_art_no = goods_art_no_dict["货号"]
  212. for index, view_name in enumerate(view_list):
  213. pp_jpg = self.get_overlay_pic_from_dict(goods_art_no=goods_art_no,
  214. color_name=view_name,
  215. bg_color=self.base_bg_color)
  216. if view_name == "后跟":
  217. pp_jpg = pp_jpg.resize(value=600)
  218. else:
  219. pp_jpg = pp_jpg.resize(value=1202)
  220. pp_jpg = pp_jpg.paste_img_invert(
  221. top_img=PictureProcessing("RGB", (1600, pp_jpg.height + 100), self.base_bg_color),
  222. base="cc",
  223. value=(0, 0))
  224. detailed_images.append(pp_jpg)
  225. return PictureProcessing(im=self.add_pic(detailed_images))
  226. # 添加注意事项
  227. def deal_pic_6(self):
  228. detailed_images = []
  229. detailed_images.append(PictureProcessing(r"{}\15.jpg".format(self.root)))
  230. detailed_images.append(PictureProcessing(r"{}\16.jpg".format(self.root)))
  231. detailed_images.append(PictureProcessing(r"{}\17.jpg".format(self.root)))
  232. detailed_images.append(PictureProcessing(r"{}\18.jpg".format(self.root)))
  233. return PictureProcessing(im=self.add_pic(detailed_images))