detail_huilima1.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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_2,
  45. self.deal_pic_3,
  46. self.deal_pic_4,
  47. self.deal_pic_5,
  48. ]
  49. bg_color = (246, 246, 246)
  50. self.image_init(bg_color)
  51. if test:
  52. self.run_test()
  53. else:
  54. self.run_all()
  55. def run_test(self):
  56. detailed_images = []
  57. detailed_images.append(self.deal_pic_1())
  58. detailed_images.append(self.deal_pic_2())
  59. detailed_images.append(self.deal_pic_3())
  60. detailed_images.append(self.deal_pic_4())
  61. detailed_images.append(self.deal_pic_5())
  62. img = self.add_pic(detailed_images)
  63. # img.save(r"{}/{}.jpg".format(self.out_put_dir, self.goods_no, format="JPEG"))
  64. if img:
  65. img.show()
  66. def deal_pic_1(self):
  67. bg_color = (246, 246, 246)
  68. """ 制作主图 """
  69. detailed_images = []
  70. pp_0 = PictureProcessing(r"{}\image (1).jpg".format(self.root))
  71. detailed_images.append(pp_0)
  72. goods_art_no_list = list(self.data.keys())
  73. pp_1 = self.data[goods_art_no_list[0]]["pic_is_deal"]["俯视"]
  74. pp_image = pp_1.resize(mode="relative",
  75. base="by_im",
  76. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)))
  77. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  78. mode="pixel", top_img=pp_image, base="center"
  79. )
  80. bg_img = PictureProcessing("RGB", (1200, 918), (255, 255, 255)).paste_img(
  81. mode="pixel", top_img=pp_image, base="nw", value=(26, 26))
  82. # bg_img.show()
  83. # ---------- 第二张图粘贴
  84. pp_2 = self.data[goods_art_no_list[0]]["pic_is_deal"]["侧视"]
  85. pp_image = pp_2.resize(mode="relative",
  86. base="by_im",
  87. base_im=PictureProcessing("RGB", (604, 418), (248, 248, 248)), )
  88. pp_image = PictureProcessing("RGB", (604, 418), bg_color).paste_img(
  89. mode="pixel", top_img=pp_image, base="center"
  90. )
  91. bg_img = bg_img.paste_img(
  92. mode="pixel", top_img=pp_image, base="nw", value=(26, 26 + 26 + 418))
  93. # -------粘贴文字-------
  94. font = ImageFont.truetype(r'resources\ttf\simhei.ttf', 30)
  95. text_list = [("商品款号", self.goods_no_value["款号"], 700, 297),
  96. ("商品面料", self.goods_no_value["商品面料"], 700, 380),
  97. ("商品内里", self.goods_no_value["商品内里"], 700, 469),
  98. ("商品鞋底", self.goods_no_value["商品鞋底"], 700, 549), ]
  99. for i in text_list:
  100. bg_img = bg_img.add_text(mode="pixel",
  101. value=(i[2], i[3]),
  102. font=font,
  103. text="{}:{}".format(i[0], i[1]),
  104. align="center",
  105. spacing=10,
  106. fill=(17, 16, 16))
  107. detailed_images.append(bg_img)
  108. return PictureProcessing(im=self.add_pic(detailed_images))
  109. def deal_pic_2(self):
  110. # 尺码表
  111. pp_1 = PictureProcessing(r"{}\image (2).jpg".format(self.root))
  112. return pp_1
  113. def deal_pic_3(self):
  114. # 细节图展示
  115. bg_color = (246, 246, 246)
  116. detailed_images = []
  117. goods_art_no_list = list(self.data.keys())
  118. view_dict = {"俯视": {"crop_img_value": (-77, 401, 1086, 752),
  119. "crop_img_base": "sw",
  120. "paste_img_value": (0, 0),
  121. "paste_img_base": "center",
  122. },
  123. "侧视": {"crop_img_value": (0, 0, 1086, 752),
  124. "crop_img_base": "sw",
  125. "paste_img_value": (0, 0),
  126. "paste_img_base": "center",
  127. },
  128. }
  129. for index, goods_art_no in enumerate(goods_art_no_list):
  130. if index == 0:
  131. name_list = ["俯视", "侧视", "鞋底", "内里"]
  132. else:
  133. name_list = ["俯视", "侧视", ]
  134. # 第一个颜色
  135. if "俯视" in name_list:
  136. _pp = self.image_one_pic(goods_art_no, "俯视", bg_color=bg_color)
  137. if _pp is None:
  138. continue
  139. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  140. _pp = (_pp.resize(value=1900)
  141. .crop_img(mode="pixel", base="sw", value=(-77, 0, 1086, 752), color_fill=bg_color)
  142. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  143. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  144. )
  145. detailed_images.append(_pp)
  146. if "侧视" in name_list:
  147. _pp = self.image_one_pic(goods_art_no, "侧视", bg_color=bg_color)
  148. if _pp is None:
  149. continue
  150. bg_img = PictureProcessing("RGBA", (1200, 848), (255, 255, 255))
  151. _pp = (_pp.resize(value=1733)
  152. .crop_img(mode="pixel", base="wc", value=(715, 0, 1086, 752), color_fill=bg_color)
  153. .radius(circular_pos=(1, 1, 1, 1), mode="relative", value=100)
  154. .paste_img_invert(mode="pixel", top_img=bg_img, base="center")
  155. )
  156. detailed_images.append(_pp)
  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=1733)
  163. .crop_img(mode="pixel", base="wc", value=(715, 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=1663)
  174. .crop_img(mode="pixel", base="wc", value=(-40, 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. return PictureProcessing(im=self.add_pic(detailed_images))
  180. def deal_pic_4(self):
  181. # 制作角度展示图
  182. bg_color = (246, 246, 246)
  183. detailed_images = []
  184. goods_art_no_list = list(self.data.keys())
  185. for index, goods_art_no in enumerate(goods_art_no_list):
  186. if index == 0:
  187. name_list = ["俯视", "侧视", "后跟", "鞋底"]
  188. else:
  189. name_list = ["俯视", ]
  190. for _name in name_list:
  191. # 处理图片,需要粘贴到背景等处理
  192. if _name not in self.data[goods_art_no]["pic_is_deal"]:
  193. continue
  194. _pp = self.data[goods_art_no]["pic_is_deal"][_name]
  195. _pp = _pp.resize(mode="pixel", base="width", value=600 if _name == "后跟" else 1058, )
  196. bg_pp = PictureProcessing("RGB", (1200, int(_pp.height + 50)), bg_color)
  197. bg_pp = bg_pp.paste_img(mode="pixel", top_img=_pp, base="cc", value=(0, 0))
  198. detailed_images.append(bg_pp)
  199. # 分割线
  200. _p = PictureProcessing("RGB", (1200, 50), (255, 255, 255))
  201. detailed_images.append(_p)
  202. return PictureProcessing(im=self.add_pic(detailed_images))
  203. def deal_pic_5(self):
  204. return PictureProcessing(r"{}\image (3).jpg".format(self.root))