mirror of
https://github.com/TeamPGM/PagerMaid_Plugins_Pyro.git
synced 2024-12-03 04:36:19 +00:00
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
|
from io import BytesIO
|
||
|
|
||
|
from PIL import Image
|
||
|
from math import floor
|
||
|
|
||
|
from pagermaid.listener import listener
|
||
|
from pagermaid.enums import Message, Client
|
||
|
from pagermaid.single_utils import safe_remove
|
||
|
|
||
|
|
||
|
async def resize_image(photo):
|
||
|
image = Image.open(photo)
|
||
|
if (image.width and image.height) < 512:
|
||
|
size1 = image.width
|
||
|
size2 = image.height
|
||
|
if image.width > image.height:
|
||
|
scale = 512 / size1
|
||
|
size1new = 512
|
||
|
size2new = size2 * scale
|
||
|
else:
|
||
|
scale = 512 / size2
|
||
|
size1new = size1 * scale
|
||
|
size2new = 512
|
||
|
size1new = floor(size1new)
|
||
|
size2new = floor(size2new)
|
||
|
size_new = (size1new, size2new)
|
||
|
image = image.resize(size_new)
|
||
|
else:
|
||
|
maxsize = (512, 512)
|
||
|
image.thumbnail(maxsize)
|
||
|
|
||
|
return image
|
||
|
|
||
|
|
||
|
@listener(command="pic_to_sticker",
|
||
|
description="将你回复的图片转换为贴纸")
|
||
|
async def pic_to_sticker(bot: Client, message: Message):
|
||
|
reply = message.reply_to_message
|
||
|
photo = None
|
||
|
if reply and reply.photo:
|
||
|
photo = reply
|
||
|
elif message.photo:
|
||
|
photo = message
|
||
|
if not photo:
|
||
|
return await message.edit("请回复一张图片")
|
||
|
try:
|
||
|
photo = await bot.download_media(photo, in_memory=True)
|
||
|
message: Message = await message.edit("正在转换...\n███████70%")
|
||
|
image = await resize_image(photo)
|
||
|
file = BytesIO()
|
||
|
file.name = "sticker.webp"
|
||
|
image.save(file, "WEBP")
|
||
|
file.seek(0)
|
||
|
if reply:
|
||
|
await reply.reply_sticker(file, quote=True)
|
||
|
else:
|
||
|
await message.reply_sticker(file, quote=True)
|
||
|
except Exception as e:
|
||
|
return await message.edit(f"转换失败:{e}")
|
||
|
await message.safe_delete()
|