mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-09 05:25:53 +08:00
🐛 优化并修复原石札记
This commit is contained in:
parent
4a5d3846c2
commit
86d26717db
@ -26,5 +26,5 @@ async def send_monthly_pic(bot: Bot, ev: Event):
|
|||||||
uid = await get_uid(bot, ev)
|
uid = await get_uid(bot, ev)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return UID_HINT
|
return UID_HINT
|
||||||
im = await draw_note_img(str(uid))
|
im = await draw_note_img(str(uid), ev)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
|
@ -2,12 +2,14 @@ from pathlib import Path
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error_img
|
from gsuid_core.utils.error_reply import get_error_img
|
||||||
|
from gsuid_core.utils.image.image_tools import get_avatar_with_ring
|
||||||
|
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..utils.image.image_tools import get_color_bg
|
from ..utils.image.image_tools import add_footer, get_color_bg
|
||||||
from ..utils.fonts.genshin_fonts import gs_font_26, gs_font_38, gs_font_58
|
from ..utils.fonts.genshin_fonts import gs_font_26, gs_font_38, gs_font_58
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||||
@ -24,6 +26,7 @@ COLOR_MAP = {
|
|||||||
'每日活跃': (190, 158, 97),
|
'每日活跃': (190, 158, 97),
|
||||||
'活动奖励': (89, 126, 162),
|
'活动奖励': (89, 126, 162),
|
||||||
'深境螺旋': (113, 152, 113),
|
'深境螺旋': (113, 152, 113),
|
||||||
|
'幻想剧诗': (152, 102, 146),
|
||||||
'冒险奖励': (220, 99, 96),
|
'冒险奖励': (220, 99, 96),
|
||||||
'任务奖励': (107, 182, 181),
|
'任务奖励': (107, 182, 181),
|
||||||
'其他': (118, 168, 196),
|
'其他': (118, 168, 196),
|
||||||
@ -37,11 +40,13 @@ COLOR_MAP = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def draw_note_img(uid: str) -> Union[bytes, str]:
|
async def draw_note_img(uid: str, ev: Event) -> Union[bytes, str]:
|
||||||
# 获取数据
|
# 获取数据
|
||||||
data = await mys_api.get_award(uid)
|
data = await mys_api.get_award(uid)
|
||||||
if isinstance(data, int):
|
if isinstance(data, int):
|
||||||
return await get_error_img(data)
|
return await get_error_img(data)
|
||||||
|
|
||||||
|
avatar = await get_avatar_with_ring(ev, 317)
|
||||||
# nickname = data['nickname']
|
# nickname = data['nickname']
|
||||||
day_stone = data['day_data']['current_primogems']
|
day_stone = data['day_data']['current_primogems']
|
||||||
day_mora = data['day_data']['current_mora']
|
day_mora = data['day_data']['current_mora']
|
||||||
@ -86,9 +91,10 @@ async def draw_note_img(uid: str) -> Union[bytes, str]:
|
|||||||
|
|
||||||
# 获取背景图片各项参数
|
# 获取背景图片各项参数
|
||||||
based_w = 850
|
based_w = 850
|
||||||
based_h = 1900
|
based_h = 1950
|
||||||
|
|
||||||
img = await get_color_bg(based_w, based_h)
|
img = await get_color_bg(based_w, based_h)
|
||||||
|
img.paste(avatar, (267, 83), avatar)
|
||||||
img.paste(note_pic, (0, 0), note_pic)
|
img.paste(note_pic, (0, 0), note_pic)
|
||||||
|
|
||||||
ring_pic = Image.open(TEXT_PATH / 'ring.apng')
|
ring_pic = Image.open(TEXT_PATH / 'ring.apng')
|
||||||
@ -136,21 +142,21 @@ async def draw_note_img(uid: str) -> Union[bytes, str]:
|
|||||||
)
|
)
|
||||||
img.paste(oops_pic, (106, 1513), oops_pic)
|
img.paste(oops_pic, (106, 1513), oops_pic)
|
||||||
else:
|
else:
|
||||||
xy = ((94, 1515), (384, 1805))
|
xy = ((89, 1545), (379, 1835))
|
||||||
temp = -90
|
temp = -90
|
||||||
for index, i in enumerate(data['month_data']['group_by']):
|
for index, i in enumerate(data['month_data']['group_by']):
|
||||||
img_draw.pieslice(
|
img_draw.pieslice(
|
||||||
xy,
|
xy,
|
||||||
temp,
|
temp,
|
||||||
temp + (i['percent'] / 100) * 360,
|
temp + (i['percent'] / 100) * 360,
|
||||||
COLOR_MAP[i['action']],
|
COLOR_MAP.get(i['action'], (152, 102, 146)),
|
||||||
)
|
)
|
||||||
temp = temp + (i['percent'] / 100) * 360
|
temp = temp + (i['percent'] / 100) * 360
|
||||||
if i['action'] == '其他':
|
if i['action'] == '其他':
|
||||||
continue
|
continue
|
||||||
img_draw.rectangle(
|
img_draw.rectangle(
|
||||||
((407, 1523 + index * 52), (453, 1548 + index * 52)),
|
((407, 1523 + index * 52), (453, 1548 + index * 52)),
|
||||||
fill=COLOR_MAP[i['action']],
|
fill=COLOR_MAP.get(i['action'], (152, 102, 146)),
|
||||||
)
|
)
|
||||||
img_draw.text(
|
img_draw.text(
|
||||||
(614, 1535 + index * 52),
|
(614, 1535 + index * 52),
|
||||||
@ -159,8 +165,9 @@ async def draw_note_img(uid: str) -> Union[bytes, str]:
|
|||||||
gs_font_26,
|
gs_font_26,
|
||||||
'mm',
|
'mm',
|
||||||
)
|
)
|
||||||
img.paste(ok_pic, (115, 1535), ok_pic)
|
img.paste(ok_pic, (110, 1565), ok_pic)
|
||||||
|
|
||||||
|
img = add_footer(img, 850, 10, True)
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
logger.info('[原石札记] 图片绘制完成!等待发送...')
|
logger.info('[原石札记] 图片绘制完成!等待发送...')
|
||||||
return img
|
return img
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 66 KiB |
@ -8,7 +8,7 @@ import httpx
|
|||||||
from httpx import get
|
from httpx import get
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.api.mys.models import IndexData
|
from gsuid_core.utils.api.mys.models import IndexData
|
||||||
from PIL import Image, ImageDraw, ImageFont, ImageFilter
|
from PIL import Image, ImageOps, ImageDraw, ImageFont, ImageFilter
|
||||||
from gsuid_core.utils.image.image_tools import get_avatar_with_ring
|
from gsuid_core.utils.image.image_tools import get_avatar_with_ring
|
||||||
|
|
||||||
from ...genshinuid_config.gs_config import gsconfig
|
from ...genshinuid_config.gs_config import gsconfig
|
||||||
@ -62,8 +62,19 @@ def get_v4_title(avatar: Image.Image, uid: str, title_data: IndexData):
|
|||||||
return title
|
return title
|
||||||
|
|
||||||
|
|
||||||
def add_footer(img: Image.Image, w: int = 0):
|
def add_footer(
|
||||||
|
img: Image.Image,
|
||||||
|
w: int = 0,
|
||||||
|
offset_y: int = 0,
|
||||||
|
is_invert: bool = False,
|
||||||
|
):
|
||||||
footer = Image.open(TEXT_PATH / 'footer.png')
|
footer = Image.open(TEXT_PATH / 'footer.png')
|
||||||
|
if is_invert:
|
||||||
|
r, g, b, a = footer.split()
|
||||||
|
rgb_image = Image.merge('RGB', (r, g, b))
|
||||||
|
rgb_image = ImageOps.invert(rgb_image.convert('RGB'))
|
||||||
|
r2, g2, b2 = rgb_image.split()
|
||||||
|
footer = Image.merge('RGBA', (r2, g2, b2, a))
|
||||||
|
|
||||||
if w != 0:
|
if w != 0:
|
||||||
footer = footer.resize(
|
footer = footer.resize(
|
||||||
@ -72,8 +83,9 @@ def add_footer(img: Image.Image, w: int = 0):
|
|||||||
|
|
||||||
x, y = (
|
x, y = (
|
||||||
int((img.size[0] - footer.size[0]) / 2),
|
int((img.size[0] - footer.size[0]) / 2),
|
||||||
img.size[1] - footer.size[1] - 20,
|
img.size[1] - footer.size[1] - 20 + offset_y,
|
||||||
)
|
)
|
||||||
|
|
||||||
img.paste(footer, (x, y), footer)
|
img.paste(footer, (x, y), footer)
|
||||||
return img
|
return img
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user