diff --git a/assets/bag-on-head.png b/assets/bag-on-head.png new file mode 100644 index 0000000..cbde6f7 Binary files /dev/null and b/assets/bag-on-head.png differ diff --git a/campux/social/render/apirender.py b/campux/social/render/apirender.py index b9a1ca6..680c07f 100644 --- a/campux/social/render/apirender.py +++ b/campux/social/render/apirender.py @@ -1,6 +1,7 @@ from __future__ import annotations import datetime +import base64 import aiohttp @@ -94,6 +95,23 @@ """ +async def get_image_base64( + url: str=None, + local_path: str=None +) -> str: + + if url: + async with aiohttp.ClientSession() as session: + async with session.get(url) as resp: + img = await resp.read() + return base64.b64encode(img).decode() + + if local_path: + with open(local_path, "rb") as f: + img = f.read() + return base64.b64encode(img).decode() + + class IdoknowAPIRender: ap: app.Application @@ -108,7 +126,6 @@ async def render(self, post: entity.Post) -> bytes: jinja_data = { "username": str(post.uin), "content": post.text, - "user_avatar": f"https://q1.qlogo.cn/g?b=qq&nk={post.uin}&s=640", "foot_left_hint": f"{post.uin} 发表于 {time_str}", "foot_right_hint": "开发 @RockChinQ | @Soulter", "bg_fixed_br": f"https://q1.qlogo.cn/g?b=qq&nk={self.ap.config.campux_qq_bot_uin}&s=640", @@ -117,9 +134,16 @@ async def render(self, post: entity.Post) -> bytes: if post.anon: jinja_data["username"] = "匿名" - jinja_data["user_avatar"] = "https://avatars.githubusercontent.com/u/10137?v=4" jinja_data["foot_left_hint"] = "匿名用户 发表于 " + time_str + jinja_data["user_avatar"] = "data:image/png;base64," + await get_image_base64( + local_path="assets/bag-on-head.png" + ) + else: + jinja_data["user_avatar"] = "data:image/png;base64," + await get_image_base64( + url=f"https://q1.qlogo.cn/g?b=qq&nk={post.uin}&s=640" + ) + async with aiohttp.ClientSession() as session: async with session.post( self.ap.config.campux_text_to_image_api+"/generate",