From dacae29054835fafc304dbc67e7888979ac61a28 Mon Sep 17 00:00:00 2001 From: passthem Date: Fri, 7 Nov 2025 19:18:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B1=86=E5=8C=85=E6=B0=B4?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/meme/doubao.png | Bin 0 -> 8180 bytes konabot/plugins/memepack/__init__.py | 14 ++++++++++++++ konabot/plugins/memepack/drawing/watermark.py | 15 +++++++++++++++ 3 files changed, 29 insertions(+) create mode 100755 assets/img/meme/doubao.png create mode 100644 konabot/plugins/memepack/drawing/watermark.py diff --git a/assets/img/meme/doubao.png b/assets/img/meme/doubao.png new file mode 100755 index 0000000000000000000000000000000000000000..7a92e2a0e9cfdaa1ebac9d56082bf75e0d083f5a GIT binary patch literal 8180 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 Dnw-N% literal 0 HcmV?d00001 diff --git a/konabot/plugins/memepack/__init__.py b/konabot/plugins/memepack/__init__.py index 9b11134..c6f2905 100644 --- a/konabot/plugins/memepack/__init__.py +++ b/konabot/plugins/memepack/__init__.py @@ -34,6 +34,7 @@ from konabot.plugins.memepack.drawing.saying import ( draw_pt, draw_suan, ) +from konabot.plugins.memepack.drawing.watermark import draw_doubao_watermark from nonebot.adapters import Bot, Event @@ -342,3 +343,16 @@ async def _(quote: str, author: str, img: PIL_Image): ) await quote_cmd.send(await UniMessage().image(raw=out).export()) + +doubao_cmd = on_alconna(Alconna( + "豆包水印", + Args["image?", Image | None], +)) + + +@doubao_cmd.handle() +async def _(img: PIL_Image): + result = await draw_doubao_watermark(img) + result_bytes = BytesIO() + result.save(result_bytes, format="PNG") + await doubao_cmd.send(await UniMessage().image(raw=result_bytes).export()) diff --git a/konabot/plugins/memepack/drawing/watermark.py b/konabot/plugins/memepack/drawing/watermark.py new file mode 100644 index 0000000..9b1e02d --- /dev/null +++ b/konabot/plugins/memepack/drawing/watermark.py @@ -0,0 +1,15 @@ +import PIL +import PIL.Image + +from konabot.common.path import ASSETS_PATH +from konabot.common.utils.to_async import make_async + +doubao_watermark = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "doubao.png").convert("RGBA").resize((140, 40)) + + +@make_async +def draw_doubao_watermark(base: PIL.Image.Image) -> PIL.Image.Image: + base = base.copy().convert("RGBA") + base.alpha_composite(doubao_watermark, (base.size[0] - 160, base.size[1] - 60)) + return base + -- 2.49.0