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
|