PagerMaid_Plugins_Pyro/pic_to_sticker/main.py

61 lines
1.8 KiB
Python
Raw Normal View History

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()