detail_qingyangyizhan1.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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-1"
  27. # "俯视", "侧视", "后跟", "鞋底", "内里" 组合,组合2
  28. class DetailPicGet(DetailBase):
  29. need_view = ["俯视", "侧视", "后跟", "鞋底", "内里","组合","组合2"]
  30. root = r"{}\resources\detail_temp\qingyangyizhan\1".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\1".format(os.getcwd())
  51. print("run qingyangyizhan-1 ")
  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_3,
  58. self.deal_pic_4,
  59. self.deal_pic_5,
  60. self.deal_pic_6,
  61. self.deal_pic_7,
  62. self.deal_pic_8,
  63. self.deal_pic_9,
  64. ]
  65. if test:
  66. # pp = self.generate_font_list_to_pic()
  67. # pp.im.save(r"C:\Users\gymmc\Desktop\细节图示例/字号.png")
  68. # for k, v in self.goods_no_value.items():
  69. # print(k, v)
  70. self.run_test()
  71. else:
  72. self.run_all()
  73. def run_test(self):
  74. detailed_images = []
  75. detailed_images.append(self.deal_pic_1())
  76. detailed_images.append(self.deal_pic_2())
  77. detailed_images.append(self.deal_pic_3())
  78. detailed_images.append(self.deal_pic_4())
  79. detailed_images.append(self.deal_pic_5())
  80. detailed_images.append(self.deal_pic_6())
  81. detailed_images.append(self.deal_pic_7())
  82. detailed_images.append(self.deal_pic_8())
  83. detailed_images.append(self.deal_pic_9())
  84. img = self.add_pic(detailed_images)
  85. img.save(r"{}/{}.jpg".format(self.out_put_dir, self.goods_no, format="JPEG"))
  86. img.show()
  87. # 标题文字展示
  88. def deal_pic_1(self):
  89. detailed_images = []
  90. top_bg = PictureProcessing(r"{}\1.jpg".format(self.root),1600)
  91. detailed_images.append(top_bg)
  92. pp_bg = PictureProcessing(r"{}\2.jpg".format(self.root),1600)
  93. font_main = ImageFont.truetype(r"resources\ttf\puhui\Medium.ttf", 80) # 设计理念
  94. mainTitle = self.get_text_value("主标题")
  95. subTitle = self.get_text_value("副标题")
  96. describe = self.get_text_value("描述")
  97. main_title_text_bg = PictureProcessing("RGBA", (pp_bg.width, 200), (255, 255, 255, 0))
  98. main_title_text_bg = main_title_text_bg.get_text_image_advanced(
  99. value=(0, 0),
  100. font=font_main,
  101. text=mainTitle,
  102. align="center",
  103. spacing=5,
  104. fill=(0, 0, 0),
  105. return_mode="min_image",
  106. )
  107. pp_bg = pp_bg.paste_img(top_img=main_title_text_bg, base="nc", value=(0, 242))
  108. font_sub = ImageFont.truetype(
  109. r"resources\ttf\puhui\Regular.ttf", 30
  110. ) # 设计理念
  111. sub_title_text_bg = PictureProcessing(
  112. "RGBA", (pp_bg.width, 200), (255, 255, 255, 0)
  113. )
  114. sub_title_text_bg = sub_title_text_bg.get_text_image_advanced(
  115. value=(0, 0),
  116. font=font_sub,
  117. text=subTitle,
  118. align="center",
  119. spacing=5,
  120. fill=(45, 50, 56),
  121. return_mode="min_image",
  122. )
  123. pp_bg = pp_bg.paste_img(top_img=sub_title_text_bg, base="nc", value=(0, 337))
  124. # 描述
  125. font_sub = ImageFont.truetype(
  126. r"resources\ttf\puhui\Regular.ttf", 24
  127. ) # 设计理念
  128. desc_title_text_bg = PictureProcessing(
  129. "RGBA", (pp_bg.width, 200), (255, 255, 255, 0)
  130. )
  131. desc_title_text_bg = desc_title_text_bg.get_text_image_advanced(
  132. value=(0, 0),
  133. font=font_sub,
  134. text=describe,
  135. align="center",
  136. spacing=5,
  137. fill=(45, 50, 56),
  138. return_mode="min_image",
  139. )
  140. pp_bg = pp_bg.paste_img(top_img=desc_title_text_bg, base="nc", value=(0, 389))
  141. goods_art_no_list = list(self.data.keys())
  142. _, pp_png_1 = self.image_one_pic(
  143. return_orign=True,
  144. goods_art_no=goods_art_no_list[0],
  145. name="后跟",
  146. )
  147. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  148. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  149. pp_png_1 = pp_png_1.rotate(doge=-8)
  150. pp_bg = pp_bg.paste_img(top_img=pp_png_1, base="nc", value=(0, 532))
  151. detailed_images.append(pp_bg)
  152. return PictureProcessing(im=self.add_pic(detailed_images))
  153. # 展示鞋头和后跟
  154. def deal_pic_2(self):
  155. detailed_images = []
  156. pp_bg = PictureProcessing(r"{}\3.jpg".format(self.root), 1600)
  157. goods_art_no_list = list(self.data.keys())
  158. _, pp_png_1 = self.image_one_pic(
  159. return_orign=True,
  160. goods_art_no=goods_art_no_list[0],
  161. name="侧视",
  162. )
  163. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  164. pp_png_1 = pp_png_1.crop(mode="min")
  165. pp_png_1 = pp_png_1.resize(value=210)
  166. pp_png_1 = pp_png_1.rotate(doge=-8)
  167. pp_bg = pp_bg.paste_img(top_img=pp_png_1, base="sw", value=(96, 226))
  168. detailed_images.append(pp_bg)
  169. return PictureProcessing(im=self.add_pic(detailed_images))
  170. # 展示鞋头放大图
  171. def deal_pic_3(self):
  172. detailed_images = []
  173. pp_bg = PictureProcessing(r"{}\4.jpg".format(self.root), 1600)
  174. goods_art_no_list = list(self.data.keys())
  175. _, pp_png_1 = self.image_one_pic(
  176. return_orign=True,
  177. goods_art_no=goods_art_no_list[0],
  178. name="鞋底",
  179. )
  180. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  181. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  182. pp_png_1 = pp_png_1.rotate(doge=-8)
  183. pp_bg.paste_img(
  184. mode="pixel",
  185. top_img=pp_png_1,
  186. base="nc",
  187. value=(0, 338),
  188. )
  189. detailed_images.append(pp_bg)
  190. return PictureProcessing(im=self.add_pic(detailed_images))
  191. # 展示后跟放大图
  192. def deal_pic_4(self):
  193. detailed_images = []
  194. pp_bg = PictureProcessing(r"{}\5.jpg".format(self.root))
  195. goods_art_no_list = list(self.data.keys())
  196. _, pp_png_1 = self.image_one_pic(
  197. return_orign=True,
  198. goods_art_no=goods_art_no_list[0],
  199. name="侧视",
  200. )
  201. pp_png_1 = pp_png_1.resize(value=pp_bg.width/1.3)
  202. # pp_png_1 = pp_png_1.rotate(doge=-8)
  203. pp_bg.paste_img(
  204. mode="pixel",
  205. top_img=pp_png_1,
  206. base="nc",
  207. value=(0, 190),
  208. )
  209. detailed_images.append(pp_bg)
  210. return PictureProcessing(im=self.add_pic(detailed_images))
  211. # 展示后跟细节卡片
  212. def deal_pic_5(self):
  213. detailed_images = []
  214. pp_bg = PictureProcessing(r"{}\6.jpg".format(self.root))
  215. circle = PictureProcessing(r"{}\circle.png".format(self.root))
  216. goods_art_no_list = list(self.data.keys())
  217. _, 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.crop(mode="min")
  223. pp_png_1 = pp_png_1.resize(value=pp_bg.width - 50)
  224. desc_title_text_bg = PictureProcessing(
  225. "RGBA", (pp_bg.width, pp_png_1.height + 150), (255, 255, 255, 0)
  226. )
  227. desc_title_text_bg = desc_title_text_bg.paste_img(
  228. mode="pixel",
  229. top_img=pp_png_1,
  230. base="cc",
  231. value=(0, 0),
  232. )
  233. desc_title_text_bg = desc_title_text_bg.rotate(doge=115)
  234. pp_bg.paste_img(
  235. mode="pixel",
  236. top_img=desc_title_text_bg,
  237. base="cs",
  238. value=(0, 90),
  239. )
  240. pp_bg.paste_img(
  241. mode="pixel",
  242. top_img=circle,
  243. base="en",
  244. value=(30, 380),
  245. )
  246. detailed_images.append(pp_bg)
  247. return PictureProcessing(im=self.add_pic(detailed_images))
  248. # "心动"设计亮点,展示旋转的侧视图
  249. def deal_pic_6(self):
  250. detailed_images = []
  251. pp_bg = PictureProcessing(r"{}\7.jpg".format(self.root))
  252. pp_bg_8 = PictureProcessing(r"{}\8.jpg".format(self.root))
  253. goods_art_no_list = list(self.data.keys())
  254. goods_art = goods_art_no_list[0]
  255. _, pp_png_1 = self.image_one_pic(
  256. return_orign=True,
  257. goods_art_no=goods_art,
  258. name="侧视",
  259. )
  260. pp_png_1 = pp_png_1.crop(mode="min")
  261. pp_png_1 = pp_png_1.resize(value=pp_bg.width-100)
  262. desc_title_text_bg = PictureProcessing(
  263. "RGBA", (pp_bg.width, pp_png_1.height + 200), (255, 255, 255, 0)
  264. )
  265. desc_title_text_bg = desc_title_text_bg.paste_img(
  266. mode="pixel",
  267. top_img=pp_png_1,
  268. base="cc",
  269. value=(0, 0),
  270. )
  271. desc_title_text_bg = desc_title_text_bg.rotate(doge=150)
  272. desc_title_text_bg = desc_title_text_bg.crop(mode="min")
  273. pp_bg.paste_img(
  274. mode="pixel",
  275. top_img=desc_title_text_bg,
  276. base="cs",
  277. value=(0, 200),
  278. )
  279. detailed_images.append(pp_bg)
  280. detailed_images.append(pp_bg_8)
  281. return PictureProcessing(im=self.add_pic(detailed_images))
  282. # 产品展示,帮面等等
  283. def deal_pic_7(self):
  284. detailed_images = []
  285. pp_bg = PictureProcessing(r"{}\9.jpg".format(self.root))
  286. goods_art_no_list = list(self.data.keys())
  287. pp_jpg_1, pp_png_1 = self.image_one_pic(
  288. return_orign=True,
  289. goods_art_no=goods_art_no_list[0],
  290. name="鞋底",
  291. )
  292. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  293. pp_png_1 = pp_png_1.crop(mode="min")
  294. pp_png_1 = pp_png_1.rotate(doge=-8)
  295. pp_png_1 = pp_png_1.transpose()
  296. pp_bg.paste_img(top_img=pp_png_1, base="nc", value=(0, 520))
  297. detailed_images.append(pp_bg)
  298. return PictureProcessing(im=self.add_pic(detailed_images))
  299. # 功能展示与卖点
  300. def deal_pic_8(self):
  301. detailed_images = []
  302. pp_bg = PictureProcessing(r"{}\10.jpg".format(self.root))
  303. goods_art_no_list = list(self.data.keys())
  304. goods_art = goods_art_no_list[0]
  305. _, pp_png_1 = self.image_one_pic(
  306. return_orign=True,
  307. goods_art_no=goods_art,
  308. name="内里",
  309. )
  310. pp_png_1 = pp_png_1.crop(mode="min")
  311. pp_png_1 = pp_png_1.resize(value=300)
  312. desc_title_text_bg = PictureProcessing(
  313. "RGB", (342, 268), (255, 255, 255, 0)
  314. )
  315. desc_title_text_bg = desc_title_text_bg.paste_img(
  316. mode="pixel",
  317. top_img=pp_png_1,
  318. base="cc",
  319. value=(0, 0),
  320. )
  321. # desc_title_text_bg = desc_title_text_bg.rotate(doge=150)
  322. # desc_title_text_bg = desc_title_text_bg.crop(mode="min")
  323. desc_title_text_bg = desc_title_text_bg.radius(value=30)
  324. pp_bg.paste_img(
  325. mode="pixel",
  326. top_img=desc_title_text_bg,
  327. base="en",
  328. value=(62, 746),
  329. )
  330. detailed_images.append(pp_bg)
  331. return PictureProcessing(im=self.add_pic(detailed_images))
  332. # 添加尺码表
  333. def deal_pic_9(self):
  334. image_path = r"{}\11.jpg".format(self.root)
  335. return PictureProcessing(image_path)