From 74fc7c958d0bdd6bc278eae788cfc1828bf594e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wuyi=E6=97=A0=E7=96=91?= <444835641@qq.com> Date: Sat, 15 Apr 2023 21:30:23 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81`=E6=9F=A5?= =?UTF-8?q?=E6=AD=A6=E5=99=A8`=E7=9A=84=E5=9B=BE=E7=89=87=E7=89=88=20(#500?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GenshinUID/genshinuid_wikitext/__init__.py | 20 +-- .../genshinuid_wikitext/get_weapons_pic.py | 132 +++++++++++++----- .../texture2D/cost_tag.png | Bin 0 -> 3937 bytes .../texture2D/wiki_weapon_bg.jpg | Bin 0 -> 29324 bytes GenshinUID/gsuid_utils/api/minigg/models.py | 3 + GenshinUID/utils/get_assets.py | 3 +- GenshinUID/utils/image/convert.py | 18 ++- 7 files changed, 129 insertions(+), 47 deletions(-) create mode 100644 GenshinUID/genshinuid_wikitext/texture2D/cost_tag.png create mode 100644 GenshinUID/genshinuid_wikitext/texture2D/wiki_weapon_bg.jpg diff --git a/GenshinUID/genshinuid_wikitext/__init__.py b/GenshinUID/genshinuid_wikitext/__init__.py index bf118dc6..aae9f2d4 100644 --- a/GenshinUID/genshinuid_wikitext/__init__.py +++ b/GenshinUID/genshinuid_wikitext/__init__.py @@ -5,6 +5,7 @@ from gsuid_core.models import Event from gsuid_core.segment import MessageSegment +from .get_weapons_pic import get_weapons_wiki_img from ..genshinuid_config.gs_config import gsconfig from .get_artifacts_pic import get_artifacts_wiki_img from .get_wiki_text import ( @@ -24,17 +25,17 @@ sv_wiki_text = SV('原神WIKI文字版') -@sv_wiki_text.on_prefix(('原魔介绍', '原魔资料')) +@sv_wiki_text.on_prefix(('原魔介绍', '原魔资料', '查原魔')) async def send_enemies(bot: Bot, ev: Event): await bot.send(await enemies_wiki(ev.text)) -@sv_wiki_text.on_prefix(('食物介绍', '食物资料')) +@sv_wiki_text.on_prefix(('食物介绍', '食物资料', '查食物')) async def send_food(bot: Bot, ev: Event): await bot.send(await foods_wiki(ev.text)) -@sv_wiki_text.on_prefix(('圣遗物介绍', '圣遗物资料')) +@sv_wiki_text.on_prefix(('圣遗物介绍', '圣遗物资料', '查圣遗物')) async def send_artifacts(bot: Bot, ev: Event): if gsconfig.get_config('PicWiki').data: im = await get_artifacts_wiki_img(ev.text) @@ -43,18 +44,21 @@ async def send_artifacts(bot: Bot, ev: Event): await bot.send(im) -@sv_wiki_text.on_prefix(('武器介绍', '武器资料')) +@sv_wiki_text.on_prefix(('武器介绍', '武器资料', '查武器')) async def send_weapon(bot: Bot, ev: Event): name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) level = re.findall(r'\d+', ev.text) if len(level) == 1: im = await weapon_stats_wiki(name, int(level[0])) else: - im = await weapon_wiki(name) + if gsconfig.get_config('PicWiki').data: + im = await get_weapons_wiki_img(name) + else: + im = await weapon_wiki(name) await bot.send(im) -@sv_wiki_text.on_prefix(('角色天赋')) +@sv_wiki_text.on_prefix(('角色天赋', '查天赋')) async def send_talents(bot: Bot, ev: Event): name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) num = re.findall(r'\d+', ev.text) @@ -67,7 +71,7 @@ async def send_talents(bot: Bot, ev: Event): await bot.send(im) -@sv_wiki_text.on_prefix(('角色介绍', '角色资料')) +@sv_wiki_text.on_prefix(('角色介绍', '角色资料', '查角色')) async def send_char(bot: Bot, ev: Event): name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) level = re.findall(r'\d+', ev.text) @@ -90,7 +94,7 @@ async def send_weapon_cost(bot: Bot, ev: Event): await bot.send(im) -@sv_wiki_text.on_prefix(('角色命座')) +@sv_wiki_text.on_prefix(('角色命座', '查命座')) async def send_polar(bot: Bot, ev: Event): m = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) num_re = re.findall(r'\d+', ev.text) diff --git a/GenshinUID/genshinuid_wikitext/get_weapons_pic.py b/GenshinUID/genshinuid_wikitext/get_weapons_pic.py index 390e74b4..1e3b2af1 100644 --- a/GenshinUID/genshinuid_wikitext/get_weapons_pic.py +++ b/GenshinUID/genshinuid_wikitext/get_weapons_pic.py @@ -1,5 +1,5 @@ import math -from typing import List, Union +from typing import Dict, List, Union import aiofiles from PIL import Image, ImageDraw @@ -8,12 +8,12 @@ from ..utils.colors import white_color from ..utils.error_reply import get_error from ..utils.get_assets import get_assets_from_ambr -from ..utils.image.convert import str_lenth, convert_img +from ..utils.image.convert import convert_img, get_str_size from ..utils.resource.RESOURCE_PATH import WIKI_WEAPON_PATH from ..gsuid_utils.api.minigg.models import Weapon, WeaponStats from ..utils.image.image_tools import ( - get_color_bg, get_star_png, + get_simple_bg, get_unknown_png, ) from ..gsuid_utils.api.minigg.request import ( @@ -30,18 +30,25 @@ ) -async def get_artifacts_wiki_img(name: str) -> Union[str, bytes]: +async def get_weapons_wiki_img(name: str) -> Union[str, bytes]: data = await get_weapon_info(name) - stats = await get_weapon_stats(name, 90) if isinstance(data, int): return get_error(data) - elif isinstance(stats, int): + elif isinstance(data, List): + return get_error(-400) + else: + if int(data['rarity']) < 3: + stats = await get_weapon_stats(name, 70) + else: + stats = await get_weapon_stats(name, 90) + + if isinstance(stats, int): return get_error(stats) - elif isinstance(data, List) or isinstance(stats, List): + elif isinstance(stats, List): return get_error(-400) else: - art_name = data['name'] - path = WIKI_WEAPON_PATH / f'{art_name}.jpg' + weapon_name = data['name'] + path = WIKI_WEAPON_PATH / f'{weapon_name}.jpg' if path.exists(): async with aiofiles.open(path, 'rb') as f: return await f.read() @@ -50,13 +57,29 @@ async def get_artifacts_wiki_img(name: str) -> Union[str, bytes]: async def draw_weapons_wiki_img(data: Weapon, stats: WeaponStats): - gray_color = (175, 173, 176) + gray_color = (214, 214, 214) img_test = Image.new('RGBA', (1, 1)) img_test_draw = ImageDraw.Draw(img_test) effect = data['effect'] - effect = await str_lenth(effect, 22, 540) + effect = effect.replace('/', '·') + rw_ef = [] + for i in range(len(data['r1'])): + now = '' + for j in range(1, 6): + ef_val = data[f'r{j}'][i].replace('/', '·') + now += ef_val + ' / ' + now = f'{now[:-2]}' + rw_ef.append(now) + + if effect: + effect = effect.format(*rw_ef) + else: + effect = '无特效' + + effect = get_str_size(effect, gs_font_22, 490) + _, _, _, y1 = img_test_draw.textbbox((0, 0), effect, gs_font_22) - w, h = 600, 1040 + y1 + w, h = 600, 1110 + y1 star_pic = get_star_png(data['rarity']) type_pic = Image.open(TEXT_PATH / f'{data["weapontype"]}.png') @@ -66,7 +89,8 @@ async def draw_weapons_wiki_img(data: Weapon, stats: WeaponStats): else: gacha_pic = gacha_pic.resize((333, 666)) - img = await get_color_bg(w, h, 'wiki_weapon_bg') + bg = Image.open(TEXT_PATH / 'wiki_weapon_bg.jpg') + img = await get_simple_bg(w, h, bg) img_draw = ImageDraw.Draw(img) img_draw.text((44, 59), data['name'], white_color, gs_font_44, 'lm') @@ -89,48 +113,67 @@ async def draw_weapons_wiki_img(data: Weapon, stats: WeaponStats): sp = ( '%.1f%%' % (stats['specialized'] * 100) if data['substat'] != '元素精通' - else str(math.floor(stats['specialized'])) + else str(math.ceil(stats['specialized'])) ) else: sp = '' - atk = f'{data["baseatk"]} · {stats["attack"]}' - subval = f'{sub_val} · {sp}' + atk = f'{data["baseatk"]}/{math.ceil(stats["attack"])}' + subval = f'{sub_val}/{sp}' img_draw.text((45, 779), atk, white_color, gs_font_36, 'lm') img_draw.text((545, 779), subval, white_color, gs_font_36, 'rm') - effect_name = f'{data["effectname"]}・精炼5' if data['effectname'] else '无特效' - img_draw.text((46, 837), effect_name, white_color, gs_font_28, 'lm') - img_draw.text((46, 866), effect, gray_color, gs_font_28) + effect_name = f'{data["effectname"]}' if data['effectname'] else '无特效' + img_draw.text((46, 837), effect_name, (255, 206, 51), gs_font_28, 'lm') + img_draw.text((46, 866), effect, gray_color, gs_font_22) # 计算材料 - temp = {} - cost = data['costs'] - for i in reversed(cost.values()): + temp: Dict[str, List[int]] = {} + name_temp: Dict[str, List[str]] = {} + cost_data = data['costs'] + for i in reversed(cost_data.values()): for j in i: # type:ignore - for name in temp.keys(): - similarity = len(set(j['name']) & set(name)) - if similarity >= len(j['name']) / 2: - continue - elif j['name'] == name: - temp[name] += j['count'] - else: - temp[j['name']] = j['count'] + for k in list(temp.keys()): + sim = len(set(j['name']) & set(k)) + # 如果材料名称完全相同 + if k == j['name']: + if k not in name_temp: + name_temp[k] = [k] + temp[k] = [j['count']] + else: + temp[k][0] += j['count'] + break + # 如果两种材料的相似性超过50% + elif sim >= len(j['name']) / 2: + if j['name'] not in name_temp[k]: + name_temp[k].append(j['name']) + temp[k].append(j['count']) + else: + _i = name_temp[k].index(j['name']) + temp[k][_i] += j['count'] + break + else: + name_temp[j['name']] = [j['count']] + temp[j['name']] = [j['count']] if data['rarity'] == '5': - temp['精锻用魔矿'] = 907 + temp['精锻用魔矿'] = [907] elif data['rarity'] == '4': - temp['精锻用魔矿'] = 605 + temp['精锻用魔矿'] = [605] elif data['rarity'] == '3': - temp['精锻用魔矿'] = 399 + temp['精锻用魔矿'] = [399] elif data['rarity'] == '2': - temp['精锻用魔矿'] = 108 + temp['精锻用魔矿'] = [108] elif data['rarity'] == '1': - temp['精锻用魔矿'] = 72 + temp['精锻用魔矿'] = [72] wiki_cost_bg = Image.open(TEXT_PATH / 'wiki_weapon_cost.png') + wiki_cost_tag = Image.open(TEXT_PATH / 'cost_tag.png') + img.paste(wiki_cost_tag, (37, 890 + y1), wiki_cost_tag) wiki_cost_draw = ImageDraw.Draw(wiki_cost_bg) + + cost_pos = '' for index, cost_name in enumerate(temp): material = await get_others_info('materials', cost_name) if isinstance(material, int): @@ -142,11 +185,26 @@ async def draw_weapons_wiki_img(data: Weapon, stats: WeaponStats): cost_pic = get_unknown_png() else: cost_pic = _cost_pic.resize((64, 64)) + + if not cost_pos and material['materialtype'] == '武器突破素材': + pos = material['dropdomain'] + days = material['daysofweek'] + cost_pos = f'{pos} - {"/".join(days)}' + t = 100 * index wiki_cost_bg.paste(cost_pic, (67 + t, 46), cost_pic) - val = str(temp[cost_name]) + val_list = [str(x) for x in temp[cost_name]] + val = '/'.join(val_list) wiki_cost_draw.text((99 + t, 123), val, white_color, gs_font_18, 'mm') - img.paste(wiki_cost_bg, (0, 850 + y1), wiki_cost_bg) + img_draw.text((88, 918 + y1), cost_pos, white_color, gs_font_22, 'lm') + img.paste(wiki_cost_bg, (0, 920 + y1), wiki_cost_bg) + img = img.convert('RGB') + img.save( + WIKI_WEAPON_PATH / '{}.jpg'.format(data['name']), + format='JPEG', + quality=100, + subsampling=0, + ) return await convert_img(img) diff --git a/GenshinUID/genshinuid_wikitext/texture2D/cost_tag.png b/GenshinUID/genshinuid_wikitext/texture2D/cost_tag.png new file mode 100644 index 0000000000000000000000000000000000000000..36b23fa157bd46d5af4829e2bcb574953730da5b GIT binary patch literal 3937 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 str: return result +def get_str_size( + r: str, font: ImageFont.FreeTypeFont, limit: int = 540 +) -> str: + result = '' + line = '' + for i in r: + line += i + size, _ = font.getsize(line) + if size >= limit: + result += f'{line}\n' + line = '' + else: + result += line + return result + + def get_height(content: str, size: int) -> int: line_count = content.count('\n') return (line_count + 1) * size