diff --git a/get_image.py b/get_image.py index 55fa1ecc..8bcfa973 100644 --- a/get_image.py +++ b/get_image.py @@ -326,7 +326,8 @@ async def draw_word_cloud(uid, image=None, mode=2): result_buffer = BytesIO() bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = f"[CQ:image,file={imgmes}]" + #resultmes = f"[CQ:image,file={imgmes}]" + resultmes = imgmes return resultmes @@ -348,311 +349,331 @@ def multi_color_func(random_state=None): return "hsl({}, {}%, {}%)".format(colors[rand][0], colors[rand][1], colors[rand][2]) -async def draw_abyss0_pic(uid, nickname, image=None, mode=2, date="1"): - while 1: - use_cookies = cache_db(uid, mode - 1) +async def draw_abyss0_pic(uid,nickname,image = None,mode = 2,date = "1"): + #获取Cookies + while True: + use_cookies = cache_db(uid,mode-1) if use_cookies == '': return "绑定记录不存在。" elif use_cookies == "没有可以使用的Cookies!": return "没有可以使用的Cookies!" if mode == 3: - mys_data = await get_mihoyo_bbs_info(uid, use_cookies) + mys_data = await get_mihoyo_bbs_info(uid,use_cookies) for i in mys_data['data']['list']: if i['game_id'] != 2: mys_data['data']['list'].remove(i) uid = mys_data['data']['list'][0]['game_role_id'] nickname = mys_data['data']['list'][0]['nickname'] - # role_region = mys_data['data']['list'][0]['region'] - # role_level = mys_data['data']['list'][0]['level'] - raw_data = await get_spiral_abyss_info(uid, use_cookies, date) - raw_char_data = await get_info(uid, use_cookies) + raw_data = await get_spiral_abyss_info(uid,use_cookies,date) + raw_char_data = await get_info(uid,use_cookies) if raw_data["retcode"] != 0: if raw_data["retcode"] == 10001: - # return ("Cookie错误/过期,请重置Cookie") - error_db(use_cookies, "error") + #return ("Cookie错误/过期,请重置Cookie") + error_db(use_cookies,"error") elif raw_data["retcode"] == 10101: - # return ("当前cookies已达到30人上限!") - error_db(use_cookies, "limit30") + #return ("当前cookies已达到30人上限!") + error_db(use_cookies,"limit30") elif raw_data["retcode"] == 10102: - return "当前查询id已经设置了隐私,无法查询!" + return ("当前查询id已经设置了隐私,无法查询!") else: return ( - "Api报错,返回内容为:\r\n" - + str(raw_data) + "\r\n出现这种情况可能的UID输入错误 or 不存在" + "Api报错,返回内容为:\r\n" + + str(raw_data) + "\r\n出现这种情况可能的UID输入错误 or 不存在" ) else: break - + + #获取数据 raw_data = raw_data["data"] raw_char_data = raw_char_data['data']["avatars"] - is_edit = False - if image is not None: - image_data = image.group(2) - with open(os.path.join(TEXT_PATH, nickname + '.png'), 'wb') as f: - f.write(get(image_data).content) - is_edit = True - - bg_list = random.choice([x for x in os.listdir(BG_PATH) - if os.path.isfile(os.path.join(BG_PATH, x))]) - - bg2_path = os.path.join(BG_PATH, bg_list) - - abyss0_path = os.path.join(TEXT_PATH, "abyss_0.png") - abyss2_path = os.path.join(TEXT_PATH, "abyss_2.png") - abyss3_path = os.path.join(TEXT_PATH, "abyss_3.png") - abyss_star0_path = os.path.join(TEXT_PATH, "abyss_star0.png") - abyss_star1_path = os.path.join(TEXT_PATH, "abyss_star1.png") - + #获取查询者数据 floors_data = raw_data['floors'][-1] levels_num = len(floors_data['levels']) - based_w = 900 - based_h = 660 + levels_num * 315 - based_scale = '%.3f' % (based_w / based_h) - - if is_edit: - bg_path_edit = os.path.join(TEXT_PATH, f"{nickname}.png") + #获取背景图片 + bg2_path = os.path.join(BG_PATH,random.choice([x for x in os.listdir(BG_PATH) + if os.path.isfile(os.path.join(BG_PATH, x))])) + + if image: + image_data = image.group(2) + edit_bg = Image.open(BytesIO(get(image_data).content)) else: - bg_path_edit = bg2_path + edit_bg = Image.open(bg2_path) + + #确定图片的长宽 + based_w = 900 + based_h = 660+levels_num*315 + based_scale = '%.3f' % (based_w/based_h) - edit_bg = Image.open(bg_path_edit) w, h = edit_bg.size scale_f = '%.3f' % (w / h) - new_w = math.ceil(based_h * float(scale_f)) - new_h = math.ceil(based_w / float(scale_f)) + new_w = math.ceil(based_h*float(scale_f)) + new_h = math.ceil(based_w/float(scale_f)) if scale_f > based_scale: - bg_img2 = edit_bg.resize((new_w, based_h), Image.ANTIALIAS) + bg_img2 = edit_bg.resize((new_w, based_h),Image.ANTIALIAS) else: - bg_img2 = edit_bg.resize((based_w, new_h), Image.ANTIALIAS) + bg_img2 = edit_bg.resize((based_w, new_h),Image.ANTIALIAS) bg_img = bg_img2.crop((0, 0, based_w, based_h)) + #获取背景主色 + q = edit_bg.quantize(colors=3,method=2) + bg_num_temp = 0 + for i in range(0,3): + bg = tuple(q.getpalette()[i*3:(i*3)+3]) + bg_num = bg[0] + bg[1] + bg[2] + if bg_num >= bg_num_temp: + bg_num_temp = bg_num + bg_color = (bg[0],bg[1],bg[2]) + + #通过背景主色(bg_color)确定文字主色 + r = 140 + if max(*bg_color) > 255 - r: + r *= -1 + new_color = (math.floor(bg_color[0] + r if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + r if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + r if bg_color[2] + r <= 255 else 255)) + + #确定贴图路径 + abyss0_path = os.path.join(TEXT_PATH,"abyss_0.png") + abyss3_path = os.path.join(TEXT_PATH,"abyss_3.png") + abyss_star0_path = os.path.join(TEXT_PATH,"abyss_star0.png") + abyss_star1_path = os.path.join(TEXT_PATH,"abyss_star1.png") + avatar_bg_path = os.path.join(TEXT_PATH,"avatar_bg.png") + avatar_fg_path = os.path.join(TEXT_PATH,"avatar_fg.png") + + all_mask_path = os.path.join(TEXT_PATH,"All_Mask.png") + + #转换遮罩的颜色、大小匹配,并paste上去 + all_mask = Image.open(all_mask_path).resize(bg_img.size,Image.ANTIALIAS) + all_mask_img = Image.new("RGBA",(based_w,based_h),bg_color) + bg_img.paste(all_mask_img,(0,0),all_mask) + + #开启图片 + avatar_bg = Image.open(avatar_bg_path) + avatar_fg = Image.open(avatar_fg_path) + + #确定主体框架 + avatar_bg_color = Image.new("RGBA",(316,100),bg_color) + bg_img.paste(avatar_bg_color,(113,98),avatar_bg) + bg_img.paste(avatar_fg,(114,95),avatar_fg) + + """ x1, y1 = 65, 276 radius = 15 cropped_img1 = bg_img.crop((x1, y1, 836, 607)) - blurred_img1 = cropped_img1.filter(ImageFilter.GaussianBlur(5), ).convert("RGBA") - bg_img.paste(blurred_img1, (x1, y1), create_rounded_rectangle_mask(cropped_img1, radius)) + blurred_img1 = cropped_img1.filter(ImageFilter.GaussianBlur(5),).convert("RGBA") + bg_img.paste(blurred_img1, (x1, y1), create_rounded_rectangle_mask(cropped_img1,radius)) - for i in range(0, len(floors_data['levels'])): - x2, y2 = 65, 630 + 315 * i + for i in range(0,len(floors_data['levels'])): + x2, y2 = 65, 630 + 315*i radius = 15 - cropped_img2 = bg_img.crop((x2, y2, 836, 925 + 315 * i)) - blurred_img2 = cropped_img2.filter(ImageFilter.GaussianBlur(5), ).convert("RGBA") - bg_img.paste(blurred_img2, (x2, y2), create_rounded_rectangle_mask(cropped_img2, radius)) + cropped_img2 = bg_img.crop((x2, y2, 836, 925+315*i)) + blurred_img2 = cropped_img2.filter(ImageFilter.GaussianBlur(5),).convert("RGBA") + bg_img.paste(blurred_img2, (x2, y2), create_rounded_rectangle_mask(cropped_img2,radius)) + """ - abyss0 = Image.open(abyss0_path) + abyss0_bg_color = Image.new("RGBA",(900,620),new_color) + abyss0 = Image.new("RGBA",(900,620),(0, 0, 0, 0)) + + abyss0_pic = Image.open(abyss0_path) + abyss0.paste(abyss0_bg_color,(0,0),abyss0_pic) abyss3 = Image.open(abyss3_path) abyss_star0 = Image.open(abyss_star0_path) abyss_star1 = Image.open(abyss_star1_path) - for i in range(0, 4): - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(raw_data["reveal_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["reveal_rank"][i]["avatar_id"], raw_data["reveal_rank"][i]["avatar_icon"], - raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["reveal_rank"][i]["avatar_id"]) + ".png") + for i in range(0,4): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["reveal_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["reveal_rank"][i]["avatar_id"],raw_data["reveal_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["reveal_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["reveal_rank"][i]["avatar_id"]: - char_draw.text((63.5, 117), f'{str(raw_data["reveal_rank"][i]["value"])}次', (21, 21, 21), - genshin_font(18), - anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,117),f'{str(raw_data["reveal_rank"][i]["value"])}次',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (82 + 130 * i, 300) - abyss0.paste(char_img, char_crop, char_img) - - for i in range(0, 1): - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(raw_data["damage_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["damage_rank"][i]["avatar_id"], raw_data["damage_rank"][i]["avatar_icon"], - raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["damage_rank"][i]["avatar_id"]) + ".png") + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (82 + 130*i,300) + abyss0.paste(char_img,char_crop,char_img) + + for i in range(0,1): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["damage_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["damage_rank"][i]["avatar_id"],raw_data["damage_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["damage_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["damage_rank"][i]["avatar_id"]: - char_draw.text((63.5, 117), f'{str(raw_data["damage_rank"][i]["value"])}', (21, 21, 21), - genshin_font(18), - anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,117),f'{str(raw_data["damage_rank"][i]["value"])}',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (685, 470) - abyss0.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (685,470) + abyss0.paste(char_img,char_crop,char_img) - for i in range(0, 1): - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(raw_data["defeat_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["defeat_rank"][i]["avatar_id"], raw_data["defeat_rank"][i]["avatar_icon"], - raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["defeat_rank"][i]["avatar_id"]) + ".png") + for i in range(0,1): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["defeat_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["defeat_rank"][i]["avatar_id"],raw_data["defeat_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["defeat_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["defeat_rank"][i]["avatar_id"]: - char_draw.text((63.5, 117), f'{str(raw_data["defeat_rank"][i]["value"])}', (21, 21, 21), - genshin_font(18), - anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,117),f'{str(raw_data["defeat_rank"][i]["value"])}',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (82 + 123 * i, 470) - abyss0.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (82 + 123*i,470) + abyss0.paste(char_img,char_crop,char_img) - for i in range(0, 1): - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(raw_data["take_damage_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["take_damage_rank"][i]["avatar_id"], - raw_data["take_damage_rank"][i]["avatar_icon"], raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["take_damage_rank"][i]["avatar_id"]) + ".png") + for i in range(0,1): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["take_damage_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["take_damage_rank"][i]["avatar_id"],raw_data["take_damage_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["take_damage_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["take_damage_rank"][i]["avatar_id"]: - char_draw.text((63.5, 117), f'{str(raw_data["take_damage_rank"][i]["value"])}', (21, 21, 21), - genshin_font(18), anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,117),f'{str(raw_data["take_damage_rank"][i]["value"])}',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (232 + 123 * i, 470) - abyss0.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (232 + 123*i,470) + abyss0.paste(char_img,char_crop,char_img) - for i in range(0, 1): - if not os.path.exists( - os.path.join(CHAR_DONE_PATH, str(raw_data["normal_skill_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["normal_skill_rank"][i]["avatar_id"], - raw_data["normal_skill_rank"][i]["avatar_icon"], raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["normal_skill_rank"][i]["avatar_id"]) + ".png") + for i in range(0,1): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["normal_skill_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["normal_skill_rank"][i]["avatar_id"],raw_data["normal_skill_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["normal_skill_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["normal_skill_rank"][i]["avatar_id"]: - char_draw.text((63.5, 117), f'{str(raw_data["normal_skill_rank"][i]["value"])}', (21, 21, 21), - genshin_font(18), anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,117),f'{str(raw_data["normal_skill_rank"][i]["value"])}',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (382 + 123 * i, 470) - abyss0.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (382 + 123*i,470) + abyss0.paste(char_img,char_crop,char_img) - for i in range(0, 1): - if not os.path.exists( - os.path.join(CHAR_DONE_PATH, str(raw_data["energy_skill_rank"][i]["avatar_id"]) + ".png")): - get_char_done_pic(raw_data["energy_skill_rank"][i]["avatar_id"], - raw_data["energy_skill_rank"][i]["avatar_icon"], raw_data["reveal_rank"][i]["rarity"]) - char = os.path.join(CHAR_DONE_PATH, str(raw_data["energy_skill_rank"][i]["avatar_id"]) + ".png") + for i in range(0,1): + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(raw_data["energy_skill_rank"][i]["avatar_id"]) + ".png")): + get_char_done_pic(raw_data["energy_skill_rank"][i]["avatar_id"],raw_data["energy_skill_rank"][i]["avatar_icon"],raw_data["reveal_rank"][i]["rarity"]) + char = os.path.join(CHAR_DONE_PATH,str(raw_data["energy_skill_rank"][i]["avatar_id"]) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == raw_data["energy_skill_rank"][i]["avatar_id"]: - char_draw.text((63.5, 118), f'{str(raw_data["energy_skill_rank"][i]["value"])}', (21, 21, 21), - genshin_font(18), anchor="mm") - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((63.5,118),f'{str(raw_data["energy_skill_rank"][i]["value"])}',(21,21,21),genshin_font(18), anchor="mm") + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (532 + 123 * i, 470) - abyss0.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (532 + 123*i,470) + abyss0.paste(char_img,char_crop,char_img) - bg_img.paste(abyss0, (0, 0), abyss0) + bg_img.paste(abyss0,(0,0),abyss0) - for j in range(0, len(floors_data["levels"])): - abyss2 = Image.open(abyss2_path) + for j in range(0,len(floors_data["levels"])): + abyss2 = Image.new("RGBA", (900, 340), (0, 0, 0, 0)) + #abyss2 = Image.open(abyss2_path) num_1 = 0 for i in floors_data['levels'][j]['battles'][0]['avatars']: - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png")): - get_char_done_pic(i['id'], i['icon'], i['rarity']) - char = os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png") + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png")): + get_char_done_pic(i['id'],i['icon'],i['rarity']) + char = os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == i['id']: - char_draw.text((40, 108), f'Lv.{str(k["level"])}', (21, 21, 21), genshin_font(18)) - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((40,108),f'Lv.{str(k["level"])}',(21,21,21),genshin_font(18)) + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (70 + 125 * (num_1 % 4), 46) - abyss2.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (70 + 125*(num_1%4),46) + abyss2.paste(char_img,char_crop,char_img) num_1 = num_1 + 1 num_2 = 0 for i in floors_data['levels'][j]['battles'][1]['avatars']: - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png")): - get_char_done_pic(i['id'], i['icon'], i['rarity']) - char = os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png") + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png")): + get_char_done_pic(i['id'],i['icon'],i['rarity']) + char = os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == i['id']: - char_draw.text((40, 108), f'Lv.{str(k["level"])}', (21, 21, 21), genshin_font(18)) - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((40,108),f'Lv.{str(k["level"])}',(21,21,21),genshin_font(18)) + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (70 + 125 * (num_2 % 4), 180) - abyss2.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (70 + 125*(num_2%4),180) + abyss2.paste(char_img,char_crop,char_img) num_2 = num_2 + 1 star_num = floors_data['levels'][j]['star'] if star_num == 1: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star0, (685, 155), abyss_star0) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star0,(685,155),abyss_star0) + abyss2.paste(abyss_star0,(730,155),abyss_star0) elif star_num == 0: - abyss2.paste(abyss_star0, (640, 155), abyss_star0) - abyss2.paste(abyss_star0, (685, 155), abyss_star0) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star0,(640,155),abyss_star0) + abyss2.paste(abyss_star0,(685,155),abyss_star0) + abyss2.paste(abyss_star0,(730,155),abyss_star0) elif star_num == 2: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star1, (685, 155), abyss_star1) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star1,(685,155),abyss_star1) + abyss2.paste(abyss_star0,(730,155),abyss_star0) else: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star1, (685, 155), abyss_star1) - abyss2.paste(abyss_star1, (730, 155), abyss_star1) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star1,(685,155),abyss_star1) + abyss2.paste(abyss_star1,(730,155),abyss_star1) abyss2_text_draw = ImageDraw.Draw(abyss2) - abyss2_text_draw.text((87, 30), f"第{j + 1}间", (20, 20, 20), genshin_font(21)) - time_stamp1 = int(floors_data['levels'][j]['battles'][0]['timestamp']) - time_stamp2 = int(floors_data['levels'][j]['battles'][1]['timestamp']) - time_array1 = time.localtime(time_stamp1) - time_array2 = time.localtime(time_stamp2) - other_style_time1 = time.strftime("%Y--%m--%d %H:%M:%S", time_array1) - other_style_time2 = time.strftime("%Y--%m--%d %H:%M:%S", time_array2) - abyss2_text_draw.text((167, 33), f"{other_style_time1}/{other_style_time2}", (40, 40, 40), genshin_font(19)) - bg_img.paste(abyss2, (0, 605 + j * 315), abyss2) - - bg_img.paste(abyss3, (0, len(floors_data["levels"]) * 315 + 610), abyss3) - + abyss2_text_draw.text((87,30),f"第{j+1}间", new_color, genshin_font(21)) + timeStamp1 = int(floors_data['levels'][j]['battles'][0]['timestamp']) + timeStamp2 = int(floors_data['levels'][j]['battles'][1]['timestamp']) + timeArray1 = time.localtime(timeStamp1) + timeArray2 = time.localtime(timeStamp2) + otherStyleTime1 = time.strftime("%Y--%m--%d %H:%M:%S", timeArray1) + otherStyleTime2 = time.strftime("%Y--%m--%d %H:%M:%S", timeArray2) + abyss2_text_draw.text((167,33), f"{otherStyleTime1}/{otherStyleTime2}", new_color, genshin_font(19)) + bg_img.paste(abyss2,(0,605+j*315),abyss2) + + bg_img.paste(abyss3,(0,len(floors_data["levels"])*315+610),abyss3) + text_draw = ImageDraw.Draw(bg_img) + text_draw.text((220,123), f"{nickname}", new_color, genshin_font(32)) + text_draw.text((235, 163), 'UID ' + f"{uid}", new_color, genshin_font(14)) - text_draw.text((250, 115), f"{nickname}", (217, 217, 217), genshin_font(32)) - text_draw.text((260, 155), 'UID ' + f"{uid}", (217, 217, 217), genshin_font(14)) - - text_draw.text((690, 82), raw_data['max_floor'], (65, 65, 65), genshin_font(26)) - text_draw.text((690, 127), str(raw_data['total_battle_times']), (65, 65, 65), genshin_font(26)) - text_draw.text((690, 172), str(raw_data['total_star']), (65, 65, 65), genshin_font(26)) + text_draw.text((690, 82),raw_data['max_floor'], new_color, genshin_font(26)) + text_draw.text((690, 127),str(raw_data['total_battle_times']), new_color, genshin_font(26)) + text_draw.text((690, 172),str(raw_data['total_star']), new_color, genshin_font(26)) bg_img = bg_img.convert('RGB') result_buffer = BytesIO() bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) - # bg_img.save(result_buffer, format='PNG') + #bg_img.save(result_buffer, format='PNG') imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = f"[CQ:image,file={imgmes}]" + #resultmes = f"[CQ:image,file={imgmes}]" + resultmes = imgmes return resultmes @@ -671,8 +692,6 @@ async def draw_abyss_pic(uid, nickname, floor_num, image=None, mode=2, date="1") mys_data['data']['list'].remove(i) uid = mys_data['data']['list'][0]['game_role_id'] nickname = mys_data['data']['list'][0]['nickname'] - # role_region = mys_data['data']['list'][0]['region'] - # role_level = mys_data['data']['list'][0]['level'] raw_data = await get_spiral_abyss_info(uid, use_cookies, date) raw_char_data = await get_info(uid, use_cookies) @@ -694,167 +713,188 @@ async def draw_abyss_pic(uid, nickname, floor_num, image=None, mode=2, date="1") else: break - is_edit = False - if image is not None: - image_data = image.group(2) - with open(os.path.join(TEXT_PATH, nickname + '.png'), 'wb') as f: - f.write(get(image_data).content) - is_edit = True - + #获取数据 raw_data = raw_data["data"] raw_char_data = raw_char_data['data']["avatars"] - floors_data = raw_data['floors'] - + based_data = [] for i in floors_data: if str(i['index']) == floor_num: based_data = i - - # floor_star = based_data['star'] - # floors1_star = based_data['levels'][0]['star'] - # floors2_star = based_data['levels'][1]['star'] - # floors3_star = based_data['levels'][2]['star'] - # start_time1 = based_data['levels'][0]['battles'][0]['timestamp'] - # start_time2 = based_data['levels'][0]['battles'][1]['timestamp'] - - bg_list = random.choice([x for x in os.listdir(BG_PATH) - if os.path.isfile(os.path.join(BG_PATH, x))]) - - bg2_path = os.path.join(BG_PATH, bg_list) - - abyss1_path = os.path.join(TEXT_PATH, "abyss_1.png") - abyss2_path = os.path.join(TEXT_PATH, "abyss_2.png") - abyss3_path = os.path.join(TEXT_PATH, "abyss_3.png") - abyss_star0_path = os.path.join(TEXT_PATH, "abyss_star0.png") - abyss_star1_path = os.path.join(TEXT_PATH, "abyss_star1.png") - levels_num = len(based_data['levels']) - based_w = 900 - based_h = 240 + levels_num * 340 - based_scale = '%.3f' % (based_w / based_h) - - if is_edit: - bg_path_edit = os.path.join(TEXT_PATH, f"{nickname}.png") + #获取背景图片 + bg2_path = os.path.join(BG_PATH,random.choice([x for x in os.listdir(BG_PATH) + if os.path.isfile(os.path.join(BG_PATH, x))])) + + if image: + image_data = image.group(2) + edit_bg = Image.open(BytesIO(get(image_data).content)) else: - bg_path_edit = bg2_path + edit_bg = Image.open(bg2_path) + + #确定图片的长宽 + based_w = 900 + based_h = 440+levels_num*340 + based_scale = '%.3f' % (based_w/based_h) - edit_bg = Image.open(bg_path_edit) w, h = edit_bg.size scale_f = '%.3f' % (w / h) - new_w = math.ceil(based_h * float(scale_f)) - new_h = math.ceil(based_w / float(scale_f)) + new_w = math.ceil(based_h*float(scale_f)) + new_h = math.ceil(based_w/float(scale_f)) if scale_f > based_scale: - bg_img2 = edit_bg.resize((new_w, based_h), Image.ANTIALIAS) + bg_img2 = edit_bg.resize((new_w, based_h),Image.ANTIALIAS) else: - bg_img2 = edit_bg.resize((based_w, new_h), Image.ANTIALIAS) + bg_img2 = edit_bg.resize((based_w, new_h),Image.ANTIALIAS) bg_img = bg_img2.crop((0, 0, based_w, based_h)) - for i in range(0, len(based_data['levels'])): - x, y = 65, 220 + 340 * i - radius = 10 - cropped_img = bg_img.crop((x, y, 836, 517 + 340 * i)) - blurred_img = cropped_img.filter(ImageFilter.GaussianBlur(5), ).convert("RGBA") - bg_img.paste(blurred_img, (x, y), create_rounded_rectangle_mask(cropped_img, radius)) + #获取背景主色 + q = edit_bg.quantize(colors=3,method=2) + bg_num_temp = 0 + for i in range(0,3): + bg = tuple(q.getpalette()[i*3:(i*3)+3]) + bg_num = bg[0] + bg[1] + bg[2] + if bg_num >= bg_num_temp: + bg_num_temp = bg_num + bg_color = (bg[0],bg[1],bg[2]) + + #通过背景主色(bg_color)确定文字主色 + r = 140 + if max(*bg_color) > 255 - r: + r *= -1 + new_color = (math.floor(bg_color[0] + r if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + r if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + r if bg_color[2] + r <= 255 else 255)) + #打开图片 + abyss1_path = os.path.join(TEXT_PATH,"abyss_1.png") + abyss3_path = os.path.join(TEXT_PATH,"abyss_3.png") + abyss_star0_path = os.path.join(TEXT_PATH,"abyss_star0.png") + abyss_star1_path = os.path.join(TEXT_PATH,"abyss_star1.png") abyss1 = Image.open(abyss1_path) abyss3 = Image.open(abyss3_path) abyss_star0 = Image.open(abyss_star0_path) abyss_star1 = Image.open(abyss_star1_path) + avatar_bg_path = os.path.join(TEXT_PATH,"avatar_bg.png") + avatar_fg_path = os.path.join(TEXT_PATH,"avatar_fg.png") - bg_img.paste(abyss1, (0, 0), abyss1) + all_mask_path = os.path.join(TEXT_PATH,"All_Mask.png") - for j in range(0, len(based_data['levels'])): - abyss2 = Image.open(abyss2_path) + #转换遮罩的颜色、大小匹配,并paste上去 + all_mask = Image.open(all_mask_path).resize(bg_img.size,Image.ANTIALIAS) + all_mask_img = Image.new("RGBA",(based_w,based_h),bg_color) + bg_img.paste(all_mask_img,(0,0),all_mask) + + #开启图片 + avatar_bg = Image.open(avatar_bg_path) + avatar_fg = Image.open(avatar_fg_path) + + #确定主体框架 + avatar_bg_color = Image.new("RGBA",(316,100),bg_color) + bg_img.paste(avatar_bg_color,(113,145),avatar_bg) + bg_img.paste(avatar_fg,(114,142),avatar_fg) + + """ + for i in range(0,len(based_data['levels'])): + x, y = 65, 220 + 340*i + radius = 10 + cropped_img = bg_img.crop((x, y, 836, 517+340*i)) + blurred_img = cropped_img.filter(ImageFilter.GaussianBlur(5),).convert("RGBA") + bg_img.paste(blurred_img, (x, y), create_rounded_rectangle_mask(cropped_img,radius)) + """ + + abyss1_bg_color = Image.new("RGBA",(900,400),bg_color) + bg_img.paste(abyss1_bg_color,(0,0),abyss1) + + for j in range(0,len(based_data['levels'])): + abyss2 = Image.new("RGBA", (900, 340), (0, 0, 0, 0)) num_1 = 0 - # avatars = based_data['levels'][j]['battles'][0]['avatars'] + based_data['levels'][j]['battles'][1]['avatars'] + avatars = based_data['levels'][j]['battles'][0]['avatars'] + based_data['levels'][j]['battles'][1]['avatars'] for i in based_data['levels'][j]['battles'][0]['avatars']: - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png")): - get_char_done_pic(i['id'], i['icon'], i['rarity']) - char = os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png") + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png")): + get_char_done_pic(i['id'],i['icon'],i['rarity']) + char = os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == i['id']: - char_draw.text((40, 108), f'Lv.{str(k["level"])}', (21, 21, 21), genshin_font(18)) - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((40,108),f'Lv.{str(k["level"])}',(21,21,21),genshin_font(18)) + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (70 + 125 * (num_1 % 4), 46) - abyss2.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (70 + 125*(num_1%4),46) + abyss2.paste(char_img,char_crop,char_img) num_1 = num_1 + 1 num_2 = 0 for i in based_data['levels'][j]['battles'][1]['avatars']: - if not os.path.exists(os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png")): - get_char_done_pic(i['id'], i['icon'], i['rarity']) - char = os.path.join(CHAR_DONE_PATH, str(i['id']) + ".png") + if not os.path.exists(os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png")): + get_char_done_pic(i['id'],i['icon'],i['rarity']) + char = os.path.join(CHAR_DONE_PATH,str(i['id']) + ".png") char_img = Image.open(char) char_draw = ImageDraw.Draw(char_img) for k in raw_char_data: if k['id'] == i['id']: - char_draw.text((40, 108), f'Lv.{str(k["level"])}', (21, 21, 21), genshin_font(18)) - char_draw.text((95.3, 19), f'{str(k["actived_constellation_num"])}', 'white', genshin_font(18)) + char_draw.text((40,108),f'Lv.{str(k["level"])}',(21,21,21),genshin_font(18)) + char_draw.text((95.3,19),f'{str(k["actived_constellation_num"])}','white',genshin_font(18)) if str(k["fetter"]) == "10" or str(k["name"]) == "旅行者": - char_draw.text((93, 41.5), "♥", (21, 21, 21), genshin_font(15)) + char_draw.text((93,41.5),"♥",(21,21,21),genshin_font(15)) else: - char_draw.text((95.3, 40.5), f'{str(k["fetter"])}', (21, 21, 21), genshin_font(18)) - char_crop = (70 + 125 * (num_2 % 4), 180) - abyss2.paste(char_img, char_crop, char_img) + char_draw.text((95.3,40.5),f'{str(k["fetter"])}',(21,21,21),genshin_font(18)) + char_crop = (70 + 125*(num_2%4),180) + abyss2.paste(char_img,char_crop,char_img) num_2 = num_2 + 1 star_num = based_data['levels'][j]['star'] if star_num == 1: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star0, (685, 155), abyss_star0) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star0,(685,155),abyss_star0) + abyss2.paste(abyss_star0,(730,155),abyss_star0) elif star_num == 0: - abyss2.paste(abyss_star0, (640, 155), abyss_star0) - abyss2.paste(abyss_star0, (685, 155), abyss_star0) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star0,(640,155),abyss_star0) + abyss2.paste(abyss_star0,(685,155),abyss_star0) + abyss2.paste(abyss_star0,(730,155),abyss_star0) elif star_num == 2: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star1, (685, 155), abyss_star1) - abyss2.paste(abyss_star0, (730, 155), abyss_star0) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star1,(685,155),abyss_star1) + abyss2.paste(abyss_star0,(730,155),abyss_star0) else: - abyss2.paste(abyss_star1, (640, 155), abyss_star1) - abyss2.paste(abyss_star1, (685, 155), abyss_star1) - abyss2.paste(abyss_star1, (730, 155), abyss_star1) + abyss2.paste(abyss_star1,(640,155),abyss_star1) + abyss2.paste(abyss_star1,(685,155),abyss_star1) + abyss2.paste(abyss_star1,(730,155),abyss_star1) abyss2_text_draw = ImageDraw.Draw(abyss2) - abyss2_text_draw.text((87, 30), f"第{j + 1}间", (20, 20, 20), genshin_font(21)) - time_stamp1 = int(based_data['levels'][j]['battles'][0]['timestamp']) - time_stamp2 = int(based_data['levels'][j]['battles'][1]['timestamp']) - time_array1 = time.localtime(time_stamp1) - time_array2 = time.localtime(time_stamp2) - other_style_time1 = time.strftime("%Y--%m--%d %H:%M:%S", time_array1) - other_style_time2 = time.strftime("%Y--%m--%d %H:%M:%S", time_array2) - abyss2_text_draw.text((167, 33), f"{other_style_time1}/{other_style_time2}", (40, 40, 40), genshin_font(19)) - bg_img.paste(abyss2, (0, 200 + j * 340), abyss2) - - bg_img.paste(abyss3, (0, len(based_data['levels']) * 340 + 200), abyss3) - + abyss2_text_draw.text((87,30),f"第{j+1}间", new_color, genshin_font(21)) + timeStamp1 = int(based_data['levels'][j]['battles'][0]['timestamp']) + timeStamp2 = int(based_data['levels'][j]['battles'][1]['timestamp']) + timeArray1 = time.localtime(timeStamp1) + timeArray2 = time.localtime(timeStamp2) + otherStyleTime1 = time.strftime("%Y--%m--%d %H:%M:%S", timeArray1) + otherStyleTime2 = time.strftime("%Y--%m--%d %H:%M:%S", timeArray2) + abyss2_text_draw.text((167,33), f"{otherStyleTime1}/{otherStyleTime2}", new_color, genshin_font(19)) + bg_img.paste(abyss2,(0,350+j*340),abyss2) + + bg_img.paste(abyss3,(0,len(based_data['levels'])*340+400),abyss3) + text_draw = ImageDraw.Draw(bg_img) - text_draw.text((210, 77), f"{nickname}", (217, 217, 217), genshin_font(32)) - text_draw.text((228, 110), 'UID ' + f"{uid}", (217, 217, 217), genshin_font(14)) - if floor_num == "9": - text_draw.text((687, 67), f"{floor_num}", (29, 30, 63), genshin_font(50)) - else: - text_draw.text((670, 67), f"{floor_num}", (29, 30, 63), genshin_font(50)) + text_draw.text((220,163), f"{nickname}", new_color, genshin_font(32)) + text_draw.text((235, 203), 'UID ' + f"{uid}", new_color, genshin_font(14)) + text_draw.text((710, 190), f"{floor_num}", new_color, genshin_font(50),anchor="mm") bg_img = bg_img.convert('RGB') result_buffer = BytesIO() bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) - # bg_img.save(result_buffer, format='PNG') + #bg_img.save(result_buffer, format='PNG') imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = f"[CQ:image,file={imgmes}]" + #resultmes = f"[CQ:image,file={imgmes}]" + resultmes = imgmes return resultmes async def draw_pic(uid, nickname, image=None, mode=2, role_level=None): # 获取Cookies,如果没有能使用的则return - while 1: + while True: use_cookies = cache_db(uid, mode - 1) if use_cookies == '': return "绑定记录不存在。" @@ -1245,9 +1285,9 @@ async def draw_pic(uid, nickname, image=None, mode=2, role_level=None): char_draw = ImageDraw.Draw(charpic) char_draw.text((188, 30), i["name"] + " " + f'Lv.{str(char_level)}', new_color, genshin_font(22)) - # char_draw.text((272,45),f'Lv.{str(char_level)}',new_color,ys_font(18)) + # char_draw.text((272,45),f'Lv.{str(char_level)}',new_color,genshin_font(18)) - # char_draw.text((104.5,91.5),f'{str(char_weapon_jinglian)}',new_color,ys_font(10)) + # char_draw.text((104.5,91.5),f'{str(char_weapon_jinglian)}',new_color,genshin_font(10)) char_draw.text((222, 87), f'{str(i["fetter"])}' if str(char_name) != "旅行者" else "10", new_color, genshin_font(15), anchor="mm") @@ -1264,7 +1304,8 @@ async def draw_pic(uid, nickname, image=None, mode=2, role_level=None): result_buffer = BytesIO() bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() - resultmes = f"[CQ:image,file={imgmes}]" + #resultmes = f"[CQ:image,file={imgmes}]" + resultmes = imgmes return resultmes