51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
|
|
import hashlib
|
|||
|
|
import json
|
|||
|
|
from nonebot.log import logger as sv
|
|||
|
|
import os
|
|||
|
|
import random
|
|||
|
|
import time
|
|||
|
|
from io import BytesIO
|
|||
|
|
|
|||
|
|
import aiohttp
|
|||
|
|
import qrcode
|
|||
|
|
import requests
|
|||
|
|
import requests.exceptions
|
|||
|
|
from PIL import Image, ImageDraw, ImageFont
|
|||
|
|
|
|||
|
|
|
|||
|
|
# PNG重绘大小
|
|||
|
|
def png_resize(source_file, new_width=0, new_height=0, resample="LANCZOS", ref_file=''):
|
|||
|
|
"""
|
|||
|
|
PNG缩放透明度处理
|
|||
|
|
:param source_file: 源文件(Image.open())
|
|||
|
|
:param new_width: 设置的宽度
|
|||
|
|
:param new_height: 设置的高度
|
|||
|
|
:param resample: 抗锯齿
|
|||
|
|
:param ref_file: 参考文件
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
img = source_file
|
|||
|
|
img = img.convert("RGBA")
|
|||
|
|
width, height = img.size
|
|||
|
|
|
|||
|
|
if ref_file != '':
|
|||
|
|
imgRef = Image.open(ref_file)
|
|||
|
|
new_width, new_height = imgRef.size
|
|||
|
|
else:
|
|||
|
|
if new_height == 0:
|
|||
|
|
new_height = new_width * width / height
|
|||
|
|
|
|||
|
|
bands = img.split()
|
|||
|
|
resample_map = {
|
|||
|
|
"NEAREST": Image.NEAREST,
|
|||
|
|
"BILINEAR": Image.BILINEAR,
|
|||
|
|
"BICUBIC": Image.BICUBIC,
|
|||
|
|
"LANCZOS": Image.LANCZOS
|
|||
|
|
}
|
|||
|
|
resample_method = resample_map.get(resample, Image.LANCZOS) # 默认使用 LANCZOS
|
|||
|
|
|
|||
|
|
bands = [b.resize((new_width, new_height), resample=resample_method) for b in bands]
|
|||
|
|
resized_file = Image.merge('RGBA', bands)
|
|||
|
|
|
|||
|
|
return resized_file
|