detail_qingyangyizhan1.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  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. if mainTitle == "":
  96. mainTitle = "舒适新体验"
  97. subTitle = self.get_text_value("副标题")
  98. if subTitle == "":
  99. subTitle = "“守护热爱骑行的你”"
  100. describe = self.get_text_value("描述")
  101. if describe == "":
  102. describe = "简约造型/头围可调/高颜值撞色搭配"
  103. main_title_text_bg = PictureProcessing("RGBA", (pp_bg.width, 200), (255, 255, 255, 0))
  104. main_title_text_bg = main_title_text_bg.get_text_image_advanced(
  105. value=(0, 0),
  106. font=font_main,
  107. text=mainTitle,
  108. align="center",
  109. spacing=5,
  110. fill=(0, 0, 0),
  111. return_mode="min_image",
  112. )
  113. pp_bg = pp_bg.paste_img(top_img=main_title_text_bg, base="nc", value=(0, 242))
  114. font_sub = ImageFont.truetype(
  115. r"resources\ttf\puhui\Regular.ttf", 30
  116. ) # 设计理念
  117. sub_title_text_bg = PictureProcessing(
  118. "RGBA", (pp_bg.width, 200), (255, 255, 255, 0)
  119. )
  120. sub_title_text_bg = sub_title_text_bg.get_text_image_advanced(
  121. value=(0, 0),
  122. font=font_sub,
  123. text=subTitle,
  124. align="center",
  125. spacing=5,
  126. fill=(45, 50, 56),
  127. return_mode="min_image",
  128. )
  129. pp_bg = pp_bg.paste_img(top_img=sub_title_text_bg, base="nc", value=(0, 337))
  130. # 描述
  131. font_sub = ImageFont.truetype(
  132. r"resources\ttf\puhui\Regular.ttf", 24
  133. ) # 设计理念
  134. desc_title_text_bg = PictureProcessing(
  135. "RGBA", (pp_bg.width, 200), (255, 255, 255, 0)
  136. )
  137. desc_title_text_bg = desc_title_text_bg.get_text_image_advanced(
  138. value=(0, 0),
  139. font=font_sub,
  140. text=describe,
  141. align="center",
  142. spacing=5,
  143. fill=(45, 50, 56),
  144. return_mode="min_image",
  145. )
  146. pp_bg = pp_bg.paste_img(top_img=desc_title_text_bg, base="nc", value=(0, 389))
  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. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  154. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  155. pp_png_1 = pp_png_1.rotate(doge=-8)
  156. pp_bg = pp_bg.paste_img(top_img=pp_png_1, base="nc", value=(0, 532))
  157. detailed_images.append(pp_bg)
  158. return PictureProcessing(im=self.add_pic(detailed_images))
  159. # 展示鞋头和后跟
  160. def deal_pic_2(self):
  161. detailed_images = []
  162. pp_bg = PictureProcessing(r"{}\3.jpg".format(self.root), 1600)
  163. goods_art_no_list = list(self.data.keys())
  164. _, pp_png_1 = self.image_one_pic(
  165. return_orign=True,
  166. goods_art_no=goods_art_no_list[0],
  167. name="侧视",
  168. )
  169. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  170. pp_png_1 = pp_png_1.crop(mode="min")
  171. pp_png_1 = pp_png_1.resize(value=210)
  172. pp_png_1 = pp_png_1.rotate(doge=-8)
  173. pp_bg = pp_bg.paste_img(top_img=pp_png_1, base="sw", value=(96, 226))
  174. detailed_images.append(pp_bg)
  175. return PictureProcessing(im=self.add_pic(detailed_images))
  176. # 展示鞋头放大图
  177. def deal_pic_3(self):
  178. detailed_images = []
  179. pp_bg = PictureProcessing(r"{}\4.jpg".format(self.root), 1600)
  180. goods_art_no_list = list(self.data.keys())
  181. _, pp_png_1 = self.image_one_pic(
  182. return_orign=True,
  183. goods_art_no=goods_art_no_list[0],
  184. name="鞋底",
  185. )
  186. # pp_jpg_1 = pp_jpg_1.resize(value=pp_bg.width)
  187. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  188. pp_png_1 = pp_png_1.rotate(doge=-8)
  189. pp_bg.paste_img(
  190. mode="pixel",
  191. top_img=pp_png_1,
  192. base="nc",
  193. value=(0, 338),
  194. )
  195. detailed_images.append(pp_bg)
  196. return PictureProcessing(im=self.add_pic(detailed_images))
  197. # 展示后跟放大图
  198. def deal_pic_4(self):
  199. detailed_images = []
  200. pp_bg = PictureProcessing(r"{}\5.jpg".format(self.root))
  201. goods_art_no_list = list(self.data.keys())
  202. _, pp_png_1 = self.image_one_pic(
  203. return_orign=True,
  204. goods_art_no=goods_art_no_list[0],
  205. name="侧视",
  206. )
  207. pp_png_1 = pp_png_1.resize(value=pp_bg.width/1.3)
  208. # pp_png_1 = pp_png_1.rotate(doge=-8)
  209. pp_bg.paste_img(
  210. mode="pixel",
  211. top_img=pp_png_1,
  212. base="nc",
  213. value=(0, 190),
  214. )
  215. detailed_images.append(pp_bg)
  216. return PictureProcessing(im=self.add_pic(detailed_images))
  217. # 展示后跟细节卡片
  218. def deal_pic_5(self):
  219. detailed_images = []
  220. pp_bg = PictureProcessing(r"{}\6.jpg".format(self.root))
  221. circle = PictureProcessing(r"{}\circle.png".format(self.root))
  222. goods_art_no_list = list(self.data.keys())
  223. _, pp_png_1 = self.image_one_pic(
  224. return_orign=True,
  225. goods_art_no=goods_art_no_list[0],
  226. name="组合",
  227. )
  228. pp_png_1 = pp_png_1.crop(mode="min")
  229. pp_png_1 = pp_png_1.resize(value=pp_bg.width - 50)
  230. desc_title_text_bg = PictureProcessing(
  231. "RGBA", (pp_bg.width, pp_png_1.height + 150), (255, 255, 255, 0)
  232. )
  233. desc_title_text_bg = desc_title_text_bg.paste_img(
  234. mode="pixel",
  235. top_img=pp_png_1,
  236. base="cc",
  237. value=(0, 0),
  238. )
  239. desc_title_text_bg = desc_title_text_bg.rotate(doge=115)
  240. pp_bg.paste_img(
  241. mode="pixel",
  242. top_img=desc_title_text_bg,
  243. base="cs",
  244. value=(0, 90),
  245. )
  246. pp_bg.paste_img(
  247. mode="pixel",
  248. top_img=circle,
  249. base="en",
  250. value=(30, 380),
  251. )
  252. detailed_images.append(pp_bg)
  253. return PictureProcessing(im=self.add_pic(detailed_images))
  254. # "心动"设计亮点,展示旋转的侧视图
  255. def deal_pic_6(self):
  256. detailed_images = []
  257. pp_bg = PictureProcessing(r"{}\7.jpg".format(self.root))
  258. pp_bg_8 = PictureProcessing(r"{}\8.jpg".format(self.root))
  259. goods_art_no_list = list(self.data.keys())
  260. goods_art = goods_art_no_list[0]
  261. _, pp_png_1 = self.image_one_pic(
  262. return_orign=True,
  263. goods_art_no=goods_art,
  264. name="侧视",
  265. )
  266. pp_png_1 = pp_png_1.crop(mode="min")
  267. pp_png_1 = pp_png_1.resize(value=pp_bg.width-100)
  268. desc_title_text_bg = PictureProcessing(
  269. "RGBA", (pp_bg.width, pp_png_1.height + 200), (255, 255, 255, 0)
  270. )
  271. desc_title_text_bg = desc_title_text_bg.paste_img(
  272. mode="pixel",
  273. top_img=pp_png_1,
  274. base="cc",
  275. value=(0, 0),
  276. )
  277. desc_title_text_bg = desc_title_text_bg.rotate(doge=150)
  278. desc_title_text_bg = desc_title_text_bg.crop(mode="min")
  279. pp_bg.paste_img(
  280. mode="pixel",
  281. top_img=desc_title_text_bg,
  282. base="cs",
  283. value=(0, 200),
  284. )
  285. detailed_images.append(pp_bg)
  286. detailed_images.append(pp_bg_8)
  287. return PictureProcessing(im=self.add_pic(detailed_images))
  288. # 产品展示,帮面等等
  289. def deal_pic_7(self):
  290. detailed_images = []
  291. pp_bg = PictureProcessing(r"{}\9.jpg".format(self.root))
  292. goods_art_no_list = list(self.data.keys())
  293. pp_jpg_1, pp_png_1 = self.image_one_pic(
  294. return_orign=True,
  295. goods_art_no=goods_art_no_list[0],
  296. name="鞋底",
  297. )
  298. pp_png_1 = pp_png_1.resize(value=pp_bg.width)
  299. pp_png_1 = pp_png_1.crop(mode="min")
  300. pp_png_1 = pp_png_1.rotate(doge=-8)
  301. pp_png_1 = pp_png_1.transpose()
  302. pp_bg.paste_img(top_img=pp_png_1, base="nc", value=(0, 520))
  303. detailed_images.append(pp_bg)
  304. return PictureProcessing(im=self.add_pic(detailed_images))
  305. # 功能展示与卖点
  306. def deal_pic_8(self):
  307. detailed_images = []
  308. pp_bg = PictureProcessing(r"{}\10.jpg".format(self.root))
  309. goods_art_no_list = list(self.data.keys())
  310. goods_art = goods_art_no_list[0]
  311. _, pp_png_1 = self.image_one_pic(
  312. return_orign=True,
  313. goods_art_no=goods_art,
  314. name="内里",
  315. )
  316. pp_png_1 = pp_png_1.crop(mode="min")
  317. pp_png_1 = pp_png_1.resize(value=300)
  318. desc_title_text_bg = PictureProcessing(
  319. "RGB", (342, 268), (255, 255, 255, 0)
  320. )
  321. desc_title_text_bg = desc_title_text_bg.paste_img(
  322. mode="pixel",
  323. top_img=pp_png_1,
  324. base="cc",
  325. value=(0, 0),
  326. )
  327. # desc_title_text_bg = desc_title_text_bg.rotate(doge=150)
  328. # desc_title_text_bg = desc_title_text_bg.crop(mode="min")
  329. desc_title_text_bg = desc_title_text_bg.radius(value=30)
  330. pp_bg.paste_img(
  331. mode="pixel",
  332. top_img=desc_title_text_bg,
  333. base="en",
  334. value=(62, 746),
  335. )
  336. detailed_images.append(pp_bg)
  337. return PictureProcessing(im=self.add_pic(detailed_images))
  338. # 添加尺码表
  339. def deal_pic_9(self):
  340. image_path = r"{}\11.jpg".format(self.root)
  341. return PictureProcessing(image_path)