初步尝试UI化
This commit is contained in:
53
konabot/plugins/notice_ui/notice.py
Normal file
53
konabot/plugins/notice_ui/notice.py
Normal file
@ -0,0 +1,53 @@
|
||||
from io import BytesIO
|
||||
from PIL import Image
|
||||
from konabot.common.web_render import konaweb
|
||||
from konabot.common.web_render.core import WebRenderer
|
||||
|
||||
from playwright.async_api import Page
|
||||
|
||||
class NoticeUI:
|
||||
@staticmethod
|
||||
async def render_notice(title: str, message: str) -> bytes:
|
||||
"""
|
||||
渲染一个通知图片,包含标题和消息内容。
|
||||
"""
|
||||
async def page_function(page: Page):
|
||||
# 直到 setMaskMode 函数加载完成
|
||||
await page.wait_for_function("typeof setMaskMode === 'function'", timeout=1000)
|
||||
await page.evaluate('setMaskMode(false)')
|
||||
# 直到 setContent 函数加载完成
|
||||
await page.wait_for_function("typeof setContent === 'function'", timeout=1000)
|
||||
# 设置标题和消息内容
|
||||
await page.evaluate(f'setContent("{title}", "{message}")')
|
||||
|
||||
async def mask_function(page: Page):
|
||||
# 直到 setContent 函数加载完成
|
||||
await page.wait_for_function("typeof setContent === 'function'", timeout=1000)
|
||||
# 设置标题和消息内容
|
||||
await page.evaluate(f'setContent("{title}", "{message}")')
|
||||
# 直到 setMaskMode 函数加载完成
|
||||
await page.wait_for_function("typeof setMaskMode === 'function'", timeout=1000)
|
||||
await page.evaluate('setMaskMode(true)')
|
||||
|
||||
image_bytes = await WebRenderer.render_with_persistent_page(
|
||||
"notice_renderer",
|
||||
konaweb('notice'),
|
||||
target='#main',
|
||||
other_function=page_function,
|
||||
)
|
||||
|
||||
mask_bytes = await WebRenderer.render_with_persistent_page(
|
||||
"notice_renderer",
|
||||
konaweb('notice'),
|
||||
target='#main',
|
||||
other_function=mask_function)
|
||||
|
||||
image = Image.open(BytesIO(image_bytes)).convert("RGBA")
|
||||
mask = Image.open(BytesIO(mask_bytes)).convert("L")
|
||||
# 应用遮罩
|
||||
image.putalpha(mask)
|
||||
|
||||
output_buffer = BytesIO()
|
||||
image.save(output_buffer, format="GIF", disposal=2, loop=0)
|
||||
output_buffer.seek(0)
|
||||
return output_buffer.getvalue()
|
||||
Reference in New Issue
Block a user