detail_qingyangyizhan2.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. """
  2. 步骤:
  3. 1、整理需要处理的款号图-输出款号图文件夹
  4. 2、整理所有相关的图片作为素材图
  5. 3、按要求进行拼接
  6. """
  7. from ast import mod
  8. import os
  9. import settings
  10. from PIL import ImageFont
  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 = "qingyangyizhan-2"
  27. # "俯视", "侧视", "后跟", "鞋底", "内里" 组合,组合2
  28. class DetailPicGet(DetailBase):
  29. need_view = ["俯视", "侧视", "后跟", "鞋底"]
  30. root = r"{}\resources\detail_temp\qingyangyizhan\2".format(os.getcwd())
  31. def __init__(
  32. self,
  33. goods_no,
  34. goods_no_value: dict,
  35. out_put_dir,
  36. windows=None,
  37. test=False,
  38. excel_data=None,
  39. assigned_page_list=None,
  40. ):
  41. super().__init__(
  42. goods_no,
  43. goods_no_value,
  44. out_put_dir,
  45. windows=windows,
  46. excel_data=excel_data,
  47. assigned_page_list=assigned_page_list,
  48. )
  49. self.template_name = template_name
  50. self.root = r"{}\resources\detail_temp\qingyangyizhan\2".format(os.getcwd())
  51. print(f"run {template_name} ")
  52. self.base_bg_color = (255, 255, 255)
  53. self.base_bg_color_2 = (244, 242, 243)
  54. self.deal_pic_func_list = [
  55. self.deal_pic_1,
  56. self.deal_pic_2,
  57. self.deal_pic_5,
  58. self.deal_pic_6,
  59. self.deal_pic_6_1,
  60. self.deal_pic_7,
  61. ]
  62. if test:
  63. # pp = self.generate_font_list_to_pic()
  64. # pp.im.save(r"C:\Users\gymmc\Desktop\细节图示例/字号.png")
  65. # for k, v in self.goods_no_value.items():
  66. # print(k, v)
  67. self.run_test()
  68. else:
  69. self.run_all()
  70. def run_test(self):
  71. detailed_images = []
  72. detailed_images.append(self.deal_pic_1())
  73. detailed_images.append(self.deal_pic_2())
  74. detailed_images.append(self.deal_pic_5())
  75. detailed_images.append(self.deal_pic_6())
  76. detailed_images.append(self.deal_pic_6_1())
  77. detailed_images.append(self.deal_pic_7())
  78. img = self.add_pic(detailed_images)
  79. img.save(r"{}/{}.jpg".format(self.out_put_dir, self.goods_no, format="JPEG"))
  80. img.show()
  81. # 直立-卷发棒
  82. def deal_pic_1(self):
  83. detailed_images = []
  84. pp_bg = PictureProcessing(r"{}\1.jpg".format(self.root),1600)
  85. pp_bg2 = PictureProcessing(r"{}\2.jpg".format(self.root),1600)
  86. pp_bg2_1 = PictureProcessing(r"{}\3.jpg".format(self.root),1600)
  87. pp_bg2_2 = PictureProcessing(r"{}\4.jpg".format(self.root),1600)
  88. pp_bg3 = PictureProcessing(r"{}\5.jpg".format(self.root),1600)
  89. detailed_images.append(pp_bg)
  90. detailed_images.append(pp_bg2)
  91. detailed_images.append(pp_bg2_1)
  92. detailed_images.append(pp_bg2_2)
  93. goods_art_no_list = list(self.data.keys())
  94. _, pp_png_1 = self.image_one_pic(
  95. return_orign=True,
  96. goods_art_no=goods_art_no_list[0],
  97. name="鞋底",
  98. )
  99. pp_png_1 = pp_png_1.resize(value=pp_bg3.width/3)
  100. pp_bg3 = pp_bg3.paste_img(top_img=pp_png_1, base="cc", value=(0, -30))
  101. detailed_images.append(pp_bg3)
  102. return PictureProcessing(im=self.add_pic(detailed_images))
  103. # 展示鞋头和后跟
  104. def deal_pic_2(self):
  105. detailed_images = []
  106. pp_bg = PictureProcessing(r"{}\6.jpg".format(self.root), 1600)
  107. pp_bg_1 = PictureProcessing(r"{}\7.jpg".format(self.root), 1600)
  108. pp_bg_2 = PictureProcessing(r"{}\8.jpg".format(self.root), 1600)
  109. pp_bg5 = PictureProcessing(r"{}\9.jpg".format(self.root), 1600)
  110. # pp_bg_special_bg = PictureProcessing(r"{}\special_bg.png".format(self.root), 1600)
  111. # pp_bg_special_text = PictureProcessing(r"{}\special_bottom.png".format(self.root), 1600)
  112. # goods_art_no_list = list(self.data.keys())
  113. # _, pp_png_1 = self.image_one_pic(
  114. # return_orign=True,
  115. # goods_art_no=goods_art_no_list[0],
  116. # name="鞋底",
  117. # )
  118. # pp_bg5 = PictureProcessing(
  119. # "RGB", (pp_bg.width,pp_bg_special_bg.height), (255, 255, 255, 255)
  120. # )
  121. # pp_bg5 = pp_bg5.paste_img(top_img=pp_bg_special_bg, base="cc", value=(0, 0))
  122. # product_past_canvas = PictureProcessing(
  123. # "RGBA", (pp_bg.width, pp_png_1.height/2), (255, 255, 255, 0)
  124. # )
  125. # # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  126. # pp_png_1 = pp_png_1.crop(mode="min")
  127. # pp_png_1 = pp_png_1.resize(value=pp_bg.width/2)
  128. # product_past_canvas = product_past_canvas.paste_img(top_img=pp_png_1, base="nc", value=(0, -100))
  129. # # product_past_canvas = product_past_canvas.rotate(doge=-100)
  130. # pp_bg5 = pp_bg5.paste_img(top_img=product_past_canvas, base="nc", value=(0, 0))
  131. # pp_bg5 = pp_bg5.paste_img(top_img=pp_bg_special_text, base="cs", value=(0, 0))
  132. detailed_images.append(pp_bg)
  133. detailed_images.append(pp_bg_1)
  134. detailed_images.append(pp_bg_2)
  135. detailed_images.append(pp_bg5)
  136. return PictureProcessing(im=self.add_pic(detailed_images))
  137. # 展示鞋头放大图
  138. def deal_pic_3(self):
  139. detailed_images = []
  140. pp_bg = PictureProcessing(r"{}\6.jpg".format(self.root), 1600)
  141. detailed_images.append(pp_bg)
  142. return PictureProcessing(im=self.add_pic(detailed_images))
  143. # 展示后跟放大图
  144. def deal_pic_4(self):
  145. detailed_images = []
  146. pp_bg = PictureProcessing(r"{}\10.jpg".format(self.root))
  147. goods_art_no_list = list(self.data.keys())
  148. _, pp_png_1 = self.image_one_pic(
  149. return_orign=True,
  150. goods_art_no=goods_art_no_list[0],
  151. name="俯视",
  152. )
  153. product_past_canvas = PictureProcessing(
  154. "RGBA", (pp_bg.width*1.5, pp_png_1.height*1.5 + 350), (255, 255, 255, 0)
  155. )
  156. pp_png_1 = pp_png_1.crop(mode="min")
  157. pp_png_1 = pp_png_1.resize(value=pp_bg.width*3)
  158. product_past_canvas = product_past_canvas.paste_img(top_img=pp_png_1, base="cc", value=(0, 0))
  159. product_past_canvas = product_past_canvas.rotate(doge=-105)
  160. pp_bg = pp_bg.paste_img(top_img=product_past_canvas, base="cc", value=(100,50))
  161. detailed_images.append(pp_bg)
  162. return PictureProcessing(im=self.add_pic(detailed_images))
  163. # 展示后跟细节卡片
  164. def deal_pic_5(self):
  165. detailed_images = []
  166. pp_bg = PictureProcessing(r"{}\10.jpg".format(self.root))
  167. goods_art_no_list = list(self.data.keys())
  168. _, pp_png_1 = self.image_one_pic(
  169. return_orign=True,
  170. goods_art_no=goods_art_no_list[0],
  171. name="俯视",
  172. )
  173. product_past_canvas = PictureProcessing(
  174. "RGBA", (pp_bg.width*2, pp_png_1.height*2 + 350), (255, 255, 255, 0)
  175. )
  176. pp_png_1 = pp_png_1.resize(value=pp_bg.width*1.4)
  177. product_past_canvas = product_past_canvas.paste_img(top_img=pp_png_1, base="cc", value=(0, 0))
  178. product_past_canvas =product_past_canvas.rotate(doge=-95)
  179. pp_bg = pp_bg.paste_img(top_img=product_past_canvas, base="cc", value=(-130, 130))
  180. detailed_images.append(pp_bg)
  181. return PictureProcessing(im=self.add_pic(detailed_images))
  182. # "心动"设计亮点,展示旋转的侧视图
  183. def deal_pic_6(self):
  184. detailed_images = []
  185. pp_bg = PictureProcessing(r"{}\11.jpg".format(self.root))
  186. pp_bg1 = PictureProcessing(r"{}\12.jpg".format(self.root))
  187. pp_bg2 = PictureProcessing(r"{}\13.jpg".format(self.root))
  188. detailed_images.append(pp_bg)
  189. detailed_images.append(pp_bg1)
  190. detailed_images.append(pp_bg2)
  191. return PictureProcessing(im=self.add_pic(detailed_images))
  192. def deal_pic_6_1(self):
  193. detailed_images = []
  194. pp_bg = PictureProcessing(r"{}\14.jpg".format(self.root))
  195. pp_bg1 = PictureProcessing(r"{}\15.jpg".format(self.root))
  196. goods_art_no_list = list(self.data.keys())
  197. _, pp_png_1 = self.image_one_pic(
  198. return_orign=True,
  199. goods_art_no=goods_art_no_list[0],
  200. name="鞋底",
  201. )
  202. product_past_canvas = PictureProcessing(
  203. "RGBA", (pp_bg.width*2, pp_png_1.height*2 + 350), (255, 255, 255, 0)
  204. )
  205. pp_png_1 = pp_png_1.resize(value=pp_bg.width/3.8)
  206. product_past_canvas = product_past_canvas.paste_img(top_img=pp_png_1, base="cc", value=(0, 0))
  207. product_past_canvas =product_past_canvas.rotate(doge=-8)
  208. pp_bg = pp_bg.paste_img(top_img=product_past_canvas, base="cc", value=(0, 150))
  209. detailed_images.append(pp_bg)
  210. detailed_images.append(pp_bg1)
  211. return PictureProcessing(im=self.add_pic(detailed_images))
  212. # 产品展示,帮面等等
  213. def deal_pic_7(self):
  214. detailed_images = []
  215. pp_bg = PictureProcessing(r"{}\16.jpg".format(self.root))
  216. goods_art_no_list = list(self.data.keys())
  217. pp_jpg_1, pp_png_1 = self.image_one_pic(
  218. return_orign=True,
  219. goods_art_no=goods_art_no_list[0],
  220. name="俯视",
  221. )
  222. pp_png_1 = pp_png_1.resize(value=pp_bg.width*1.1)
  223. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  224. # pp_bg = pp_bg.to_overlay_pic_advance(top_img=pp_jpg_1,top_png_img=pp_png_1, base="cc", value=(0, 0))
  225. product_past_canvas = PictureProcessing(
  226. "RGBA", (pp_bg.width*3, pp_png_1.height*3 + 350), (255, 255, 255, 0)
  227. )
  228. # pp_png_1 = pp_png_1.resize(value=pp_bg.width/3.8)
  229. product_past_canvas = product_past_canvas.paste_img(top_img=pp_png_1, base="cc", value=(0, 0))
  230. product_past_canvas =product_past_canvas.rotate(doge=-86)
  231. pp_bg = pp_bg.paste_img(top_img=product_past_canvas, base="cc", value=(0, 70))
  232. detailed_images.append(pp_bg)
  233. return PictureProcessing(im=self.add_pic(detailed_images))
  234. # 功能展示与卖点
  235. def deal_pic_8(self):
  236. detailed_images = []
  237. pp_bg = PictureProcessing(r"{}\10.jpg".format(self.root))
  238. goods_art_no_list = list(self.data.keys())
  239. goods_art = goods_art_no_list[0]
  240. _, pp_png_1 = self.image_one_pic(
  241. return_orign=True,
  242. goods_art_no=goods_art,
  243. name="内里",
  244. )
  245. pp_png_1 = pp_png_1.crop(mode="min")
  246. pp_png_1 = pp_png_1.resize(value=300)
  247. desc_title_text_bg = PictureProcessing(
  248. "RGB", (342, 268), (255, 255, 255, 0)
  249. )
  250. desc_title_text_bg = desc_title_text_bg.paste_img(
  251. mode="pixel",
  252. top_img=pp_png_1,
  253. base="cc",
  254. value=(0, 0),
  255. )
  256. # desc_title_text_bg = desc_title_text_bg.rotate(doge=150)
  257. # desc_title_text_bg = desc_title_text_bg.crop(mode="min")
  258. desc_title_text_bg = desc_title_text_bg.radius(value=30)
  259. pp_bg.paste_img(
  260. mode="pixel",
  261. top_img=desc_title_text_bg,
  262. base="en",
  263. value=(62, 746),
  264. )
  265. detailed_images.append(pp_bg)
  266. return PictureProcessing(im=self.add_pic(detailed_images))
  267. # 添加尺码表
  268. def deal_pic_9(self):
  269. image_path = r"{}\11.jpg".format(self.root)
  270. return PictureProcessing(image_path)