mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-10-21 16:27:15 +08:00
88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
import json
|
||
from pathlib import Path
|
||
from typing import Union, Optional, Tuple
|
||
from ssl import SSLCertVerificationError
|
||
from PIL import Image
|
||
from utils import aiorequests
|
||
|
||
|
||
def load_image(
|
||
path: Union[Path, str],
|
||
*,
|
||
size: Optional[Union[Tuple[int, int], float]] = None,
|
||
crop: Optional[Tuple[int, int, int, int]] = None,
|
||
mode: Optional[str] = None,
|
||
):
|
||
"""
|
||
说明:
|
||
读取图像,并预处理
|
||
参数:
|
||
:param path: 图片路径
|
||
:param size: 预处理尺寸
|
||
:param crop: 预处理裁剪大小
|
||
:param mode: 预处理图像模式
|
||
:return: 图像对象
|
||
"""
|
||
img = Image.open(path)
|
||
if size:
|
||
if isinstance(size, float):
|
||
img = img.resize((int(img.size[0] * size), int(img.size[1] * size)), Image.ANTIALIAS)
|
||
elif isinstance(size, tuple):
|
||
img = img.resize(size, Image.ANTIALIAS)
|
||
if crop:
|
||
img = img.crop(crop)
|
||
if mode:
|
||
img = img.convert(mode)
|
||
return img
|
||
|
||
|
||
def load_json(file: str = None, path: Union[Path, str] = None, encoding: str = 'utf-8') -> dict:
|
||
"""
|
||
说明:
|
||
读取本地json文件,返回json字典。file和path参数2选1即可,file需为data/LittlePaimon中的文件,path哪的文件都行
|
||
参数:
|
||
:param file: 文件名
|
||
:param path: 文件路径
|
||
:param encoding: 编码,默认为utf-8
|
||
:return: json字典
|
||
"""
|
||
if file and not path:
|
||
path = Path() / 'data' / 'LittlePaimon' / file
|
||
elif path:
|
||
if isinstance(path, str):
|
||
path = Path(path)
|
||
if not path.exists():
|
||
save_json({}, file, path, encoding)
|
||
return json.load(path.open('r', encoding=encoding))
|
||
|
||
|
||
async def load_json_from_url(url: str, path: Union[Path, str] = None, force_refresh: bool = False) -> dict:
|
||
"""
|
||
从网络url中读取json,当有path参数时,如果path文件不存在,就会从url下载保存到path,如果path文件存在,则直接读取path
|
||
:param url: url
|
||
:param path: 本地json文件路径
|
||
:param force_refresh: 是否强制重新下载
|
||
:return: json字典
|
||
"""
|
||
if path and Path(path).exists() and not force_refresh:
|
||
return load_json(path=path)
|
||
else:
|
||
try:
|
||
resp = await aiorequests.get(url)
|
||
except SSLCertVerificationError:
|
||
resp = await aiorequests.get(url.replace('https', 'http'))
|
||
data = resp.json()
|
||
if path and not Path(path).exists():
|
||
save_json(data=data, path=path)
|
||
return data
|
||
|
||
|
||
def save_json(data, file: str = None, path: Union[Path, str] = None, encoding: str = 'utf-8'):
|
||
if file and not path:
|
||
path = Path() / 'data' / 'LittlePaimon' / file
|
||
elif path:
|
||
if isinstance(path, str):
|
||
path = Path(path)
|
||
path.parent.mkdir(parents=True, exist_ok=True)
|
||
json.dump(data, path.open('w', encoding=encoding), ensure_ascii=False, indent=4)
|