HEXI/hexi/plugins/battlefield2042status/picture_builder.py
2023-11-03 10:28:27 +08:00

67 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import base64
import os
import random
from decimal import Decimal
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
from .picture_tools import draw_rect, circle_corner, png_resize, \
get_top_object_img, \
image_paste, paste_ic_logo, get_avatar, get_special_icon, draw_point_line\
from .PlayDataClass import PlayerStats
filepath = os.path.dirname(__file__).replace("\\", "/")
async def builder(data, platform, property):
# 1. 构建纯黑画板 1920*1080
data_image = Image.new('RGBA', (1920, 1080), (0, 0, 0, 1000))
draw = ImageDraw.Draw(data_image)
# 2. 载入字体
ch_text_font4 = ImageFont.truetype(filepath + '/font/NotoSansSCMedium-4.ttf', 32)
en_text_font4 = ImageFont.truetype(filepath + '/font/BF_Modernista-Bold.ttf', 32)
ch_text_font_5 = ImageFont.truetype(filepath + '/font/NotoSansSCMedium-4.ttf', 24)
# 3. 获取各个类别的数据
we = PlayerStats(data)
weapon_list = we.weapons
weapon_list = sorted(data[property], key=lambda k: k['kills'], reverse=True)
vehicle_list = sorted(data[property], key=lambda k: k['kills'], reverse=True)
class_list = sorted(data[property], key=lambda k: k['kills'], reverse=True)
# 4. 绘制武器板块
height = 170
line_height = 515
for i in range(0, 5):
# 粘贴武器图片
data_image = image_paste(get_top_object_img(weapon_list[i]).resize((160, 80)), data_image, (50, height + 5))
# 绘制竖线
draw.line([290, height - 5, 290, height+130], fill="white", width=3, joint=None)
# 获取文字的宽度
weapon_name = weapon_list[i]["weaponName"]
width = draw.textlength(weapon_name, en_text_font4) # 获取长度
# 绘制武器名称
draw.text((200-width, height+90), f'{weapon_name}', fill="white", direction="rtl", font=en_text_font4)
# 绘制武器数据
draw.text((300, height), f'击杀数:{weapon_list[i]["kills"]}', fill="white", font=ch_text_font_5)
draw.text((300, height + 35), f'爆头率:{weapon_list[i]["headshots"]}', fill="white", font=ch_text_font_5)
draw.text((300, height + 70), f'命中率:{weapon_list[i]["accuracy"]}', fill="white", font=ch_text_font_5)
draw.text((300, height + 105), f'KPM{weapon_list[i]["killsPerMinute"]}', fill="white", font=ch_text_font_5)
# 绘制时长边框
data_image = draw_rect(data_image, (210, height+90, 290, height+130), 5, fill=(255, 255, 255, 1000))
# 绘制时长
play_time = f'{int(int(weapon_list[i]["timeEquipped"]) / 3600 + 0.55)}H'
font_width = draw.textlength(play_time, en_text_font4) # 获取长度
draw.text((285-font_width, height+90), play_time,
fill="black",
font=en_text_font4)
height += 180
data_image.show()
b_io = BytesIO()
data_image.save(b_io, format="PNG")
base64_str = 'base64://' + base64.b64encode(b_io.getvalue()).decode()
return base64_str