detail_huilima1.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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-1"
  27. class A(object):
  28. def __init__(self):
  29. print("AAAAAAAAAAAAAAAA")
  30. class DetailPicGet(DetailBase):
  31. need_view = ["俯视", "侧视", "后跟", "鞋底", "内里"]
  32. root = r"{}\resources\detail_temp\huilima\1".format(os.getcwd())
  33. a = A()
  34. def __init__(self, goods_no, goods_no_value: dict, out_put_dir, windows=None, test=False, excel_data=None,
  35. assigned_page_list=None, **kwargs):
  36. super().__init__(goods_no, goods_no_value, out_put_dir, windows=windows, excel_data=excel_data,
  37. assigned_page_list=assigned_page_list)
  38. self.template_name = template_name
  39. self.root = r"{}\resources\detail_temp\huilima\1".format(os.getcwd())
  40. print("run huilima-1 ")
  41. self.base_bg_color = (228, 196, 147)
  42. self.deal_pic_func_list = [
  43. self.deal_pic_1,
  44. self.deal_pic_1_2,
  45. self.deal_pic_1_3,
  46. self.deal_pic_2,
  47. self.deal_pic_3,
  48. self.deal_pic_4,
  49. self.deal_pic_5,
  50. ]
  51. bg_color = (246, 246, 246)
  52. self.image_init(bg_color)
  53. if test:
  54. self.run_test()
  55. else:
  56. self.run_all()
  57. def run_test(self):
  58. detailed_images = []
  59. detailed_images.append(self.deal_pic_1())
  60. detailed_images.append(self.deal_pic_2())
  61. detailed_images.append(self.deal_pic_3())
  62. detailed_images.append(self.deal_pic_4())
  63. detailed_images.append(self.deal_pic_5())
  64. img = self.add_pic(detailed_images)
  65. # img.save(r"{}/{}.jpg".format(self.out_put_dir, self.goods_no, format="JPEG"))
  66. if img:
  67. img.show()
  68. def deal_pic_1(self):
  69. bg_color = (246, 246, 246)
  70. """ 制作主图 """
  71. detailed_images = []
  72. pp_0 = PictureProcessing(r"{}\image (1).jpg".format(self.root))
  73. detailed_images.append(pp_0)
  74. goods_art_no_list = list(self.data.keys())
  75. pp_1 = self.data[goods_art_no_list[0]]["pic_is_deal"]["俯视"]
  76. pp_image = pp_1.resize(mode="relative",
  77. base="by_im",
  78. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)))
  79. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  80. mode="pixel", top_img=pp_image, base="center"
  81. )
  82. bg_img = PictureProcessing("RGB", (1200, 918), (255, 255, 255)).paste_img(
  83. mode="pixel", top_img=pp_image, base="nw", value=(26, 26))
  84. # bg_img.show()
  85. # ---------- 第二张图粘贴
  86. pp_2 = self.data[goods_art_no_list[0]]["pic_is_deal"]["侧视"]
  87. pp_image = pp_2.resize(mode="relative",
  88. base="by_im",
  89. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)), )
  90. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  91. mode="pixel", top_img=pp_image, base="center"
  92. )
  93. bg_img = bg_img.paste_img(
  94. mode="pixel", top_img=pp_image, base="nw", value=(26, 26 + 26 + 418))
  95. # -------粘贴文字-------
  96. font = ImageFont.truetype(r'resources\ttf\simhei.ttf', 30)
  97. text_list = [("商品款号", self.goods_no_value["款号"], 700, 297),
  98. ("商品面料", self.goods_no_value["商品面料"], 700, 380),
  99. ("商品内里", self.goods_no_value["商品内里"], 700, 469),
  100. ("商品鞋底", self.goods_no_value["商品鞋底"], 700, 549), ]
  101. for i in text_list:
  102. bg_img = bg_img.add_text(mode="pixel",
  103. value=(i[2], i[3]),
  104. font=font,
  105. text="{}:{}".format(i[0], i[1]),
  106. align="center",
  107. spacing=10,
  108. fill=(17, 16, 16))
  109. detailed_images.append(bg_img)
  110. return PictureProcessing(im=self.add_pic(detailed_images))
  111. #模特图
  112. def deal_pic_1_2(self):
  113. if self.get_text_value("模特图"):
  114. mote_img = PictureProcessing(self.get_text_value("模特图"))
  115. mote_img = mote_img.resize(value=1200)
  116. bg_img = PictureProcessing("RGB", (mote_img.width, mote_img.height), (255,255,255))
  117. bg_img = bg_img.paste_img(top_img=mote_img,base="nc", value=(0, 0))
  118. return bg_img
  119. else:
  120. return
  121. #场景图
  122. def deal_pic_1_3(self):
  123. if self.get_text_value("场景图"):
  124. mote_img = PictureProcessing(self.get_text_value("场景图"))
  125. mote_img = mote_img.resize(value=1200)
  126. bg_img = PictureProcessing("RGB", (mote_img.width, mote_img.height), (255,255,255))
  127. bg_img = bg_img.paste_img(top_img=mote_img,base="nc", value=(0, 0))
  128. return bg_img
  129. else:
  130. return
  131. def deal_pic_2(self):
  132. # 尺码表
  133. pp_1 = PictureProcessing(r"{}\image (2).jpg".format(self.root))
  134. return pp_1
  135. def deal_pic_3(self):
  136. # 细节图展示
  137. bg_color = (246, 246, 246)
  138. detailed_images = []
  139. goods_art_no_list = list(self.data.keys())
  140. view_dict = {"俯视": {"crop_img_value": (-77, 401, 1086, 752),
  141. "crop_img_base": "sw",
  142. "paste_img_value": (0, 0),
  143. "paste_img_base": "center",
  144. },
  145. "侧视": {"crop_img_value": (0, 0, 1086, 752),
  146. "crop_img_base": "sw",
  147. "paste_img_value": (0, 0),
  148. "paste_img_base": "center",
  149. },
  150. }
  151. for index, goods_art_no in enumerate(goods_art_no_list):
  152. if index == 0:
  153. name_list = ["俯视", "侧视", "鞋底", "内里"]
  154. else:
  155. name_list = ["俯视", "侧视", ]
  156. # 第一个颜色
  157. if "俯视" in name_list:
  158. _pp = self.image_one_pic(goods_art_no, "俯视", bg_color=bg_color)
  159. if _pp is None:
  160. continue
  161. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  162. _pp = (_pp.resize(value=1900)
  163. .crop_img(mode="pixel", base="sw", value=(-77, 0, 1086, 752), color_fill=bg_color)
  164. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  165. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  166. )
  167. detailed_images.append(_pp)
  168. if "侧视" in name_list:
  169. _pp = self.image_one_pic(goods_art_no, "侧视", bg_color=bg_color)
  170. if _pp is None:
  171. continue
  172. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  173. _pp = (_pp.resize(value=1733)
  174. .crop_img(mode="pixel", base="wc", value=(715, 0, 1086, 752), color_fill=bg_color)
  175. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  176. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  177. )
  178. detailed_images.append(_pp)
  179. if "鞋底" in name_list:
  180. _pp = self.image_one_pic(goods_art_no, "鞋底", bg_color=bg_color)
  181. if _pp is None:
  182. continue
  183. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  184. _pp = (_pp.resize(value=1733)
  185. .crop_img(mode="pixel", base="wc", value=(715, 0, 1086, 752), color_fill=bg_color)
  186. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  187. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  188. )
  189. detailed_images.append(_pp)
  190. if "内里" in name_list:
  191. _pp = self.image_one_pic(goods_art_no, "内里", bg_color=bg_color)
  192. if _pp is None:
  193. continue
  194. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  195. _pp = (_pp.resize(value=1663)
  196. .crop_img(mode="pixel", base="wc", value=(-40, 0, 1086, 752), color_fill=bg_color)
  197. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  198. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  199. )
  200. detailed_images.append(_pp)
  201. return PictureProcessing(im=self.add_pic(detailed_images))
  202. def deal_pic_4(self):
  203. # 制作角度展示图
  204. bg_color = (246, 246, 246)
  205. detailed_images = []
  206. goods_art_no_list = list(self.data.keys())
  207. for index, goods_art_no in enumerate(goods_art_no_list):
  208. if index == 0:
  209. name_list = ["俯视", "侧视", "后跟", "鞋底"]
  210. else:
  211. name_list = ["俯视", ]
  212. for _name in name_list:
  213. # 处理图片,需要粘贴到背景等处理
  214. if _name not in self.data[goods_art_no]["pic_is_deal"]:
  215. continue
  216. _pp = self.data[goods_art_no]["pic_is_deal"][_name]
  217. _pp = _pp.resize(mode="pixel", base="width", value=600 if _name == "后跟" else 1058, )
  218. bg_pp = PictureProcessing("RGB", (1200, int(_pp.height + 50)), bg_color)
  219. bg_pp = bg_pp.paste_img(mode="pixel", top_img=_pp, base="cc", value=(0, 0))
  220. detailed_images.append(bg_pp)
  221. # 分割线
  222. _p = PictureProcessing("RGB", (1200, 50), (255, 255, 255))
  223. detailed_images.append(_p)
  224. return PictureProcessing(im=self.add_pic(detailed_images))
  225. def deal_pic_5(self):
  226. return PictureProcessing(r"{}\image (3).jpg".format(self.root))