mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
✨ 新增一些绘图方法
This commit is contained in:
parent
90ce1ee6d7
commit
0c5ce62e6e
@ -42,7 +42,7 @@ async def find_fastest_url(urls: Dict[str, str]):
|
|||||||
fastest_time = float('inf')
|
fastest_time = float('inf')
|
||||||
|
|
||||||
for result in results:
|
for result in results:
|
||||||
if isinstance(result, Exception):
|
if isinstance(result, (Exception, BaseException)):
|
||||||
continue
|
continue
|
||||||
tag, url, elapsed_time = result
|
tag, url, elapsed_time = result
|
||||||
if elapsed_time < fastest_time:
|
if elapsed_time < fastest_time:
|
||||||
|
@ -8,12 +8,34 @@ import httpx
|
|||||||
from httpx import get
|
from httpx import get
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.utils.image.utils import sget
|
||||||
from gsuid_core.data_store import get_res_path
|
from gsuid_core.data_store import get_res_path
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||||
BG_PATH = Path(__file__).parents[1] / 'default_bg'
|
BG_PATH = Path(__file__).parents[1] / 'default_bg'
|
||||||
|
|
||||||
|
|
||||||
|
async def get_event_avatar(ev: Event) -> Image.Image:
|
||||||
|
if 'avatar' in ev.sender and ev.sender['avatar']:
|
||||||
|
avatar_url = ev.sender['avatar']
|
||||||
|
content = (await sget(avatar_url)).content
|
||||||
|
return Image.open(BytesIO(content)).convert('RGBA')
|
||||||
|
else:
|
||||||
|
img = Image.open(TEXT_PATH / 'icon.jpg').convert('RGBA')
|
||||||
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
async def get_avatar_with_ring(
|
||||||
|
ev: Event,
|
||||||
|
size: int = 300,
|
||||||
|
bg_color: Tuple[int, int, int] | None = None,
|
||||||
|
is_ring: bool = True,
|
||||||
|
) -> Image.Image:
|
||||||
|
avatar = await get_event_avatar(ev)
|
||||||
|
return await draw_pic_with_ring(avatar, size, bg_color, is_ring)
|
||||||
|
|
||||||
|
|
||||||
async def shift_image_hue(img: Image.Image, angle: float = 30) -> Image.Image:
|
async def shift_image_hue(img: Image.Image, angle: float = 30) -> Image.Image:
|
||||||
alpha = img.getchannel('A')
|
alpha = img.getchannel('A')
|
||||||
img = img.convert('HSV')
|
img = img.convert('HSV')
|
||||||
@ -195,7 +217,9 @@ async def get_qq_avatar(
|
|||||||
avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={qid}&s=640'
|
avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={qid}&s=640'
|
||||||
elif avatar_url is None:
|
elif avatar_url is None:
|
||||||
avatar_url = 'https://q1.qlogo.cn/g?b=qq&nk=3399214199&s=640'
|
avatar_url = 'https://q1.qlogo.cn/g?b=qq&nk=3399214199&s=640'
|
||||||
char_pic = Image.open(BytesIO(get(avatar_url).content)).convert('RGBA')
|
char_pic = Image.open(BytesIO((await sget(avatar_url)).content)).convert(
|
||||||
|
'RGBA'
|
||||||
|
)
|
||||||
return char_pic
|
return char_pic
|
||||||
|
|
||||||
|
|
||||||
|
BIN
gsuid_core/utils/image/texture2d/icon.jpg
Normal file
BIN
gsuid_core/utils/image/texture2d/icon.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
7
gsuid_core/utils/image/utils.py
Normal file
7
gsuid_core/utils/image/utils.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import httpx
|
||||||
|
|
||||||
|
|
||||||
|
async def sget(url: str):
|
||||||
|
async with httpx.AsyncClient(timeout=None) as client:
|
||||||
|
resp = await client.get(url=url)
|
||||||
|
return resp
|
Loading…
x
Reference in New Issue
Block a user