diff options
Diffstat (limited to 'utils/utils_img')
-rw-r--r-- | utils/utils_img/__init__.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/utils/utils_img/__init__.py b/utils/utils_img/__init__.py new file mode 100644 index 0000000..1b8c767 --- /dev/null +++ b/utils/utils_img/__init__.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +''' +@File : __init__.py +@Time : 2020/10/11 14:40:17 +@Author : Kyomotoi +@Contact : [email protected] +@Github : https://github.com/Kyomotoi +@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. +''' +__author__ = 'kyomotoi' + +import os +import string +import aiohttp +import PIL.Image as Image +from pathlib import Path +from random import sample + +from PIL import Image +from PIL import ImageFile + +async def aio_download_pics(url): + """ + :说明: + + 下载图片并重名文件 + + :参数: + + * ``URL: str``: 目标网址 + + :返回: + + 文件根目录 + + :用法: + + .. code-block:: python + + aio_download_pics(URL="https://www.demo.com/demo.jpg") + + """ + path = Path('.') / 'ATRI' / 'data' / 'data_Temp' / 'img' + path = os.path.abspath(path) + img_key = ''.join(sample(string.ascii_letters + string.digits, 16)) + img = path + f'\\{img_key}.png' + async with aiohttp.ClientSession() as session: + async with session.get(url) as response: + pic = await response.read() #以Bytes方式读入非文字 + with open(img, mode='wb') as f:# 写入文件 + f.write(pic) + f.close() + return img + +def compress_image(outfile: str, kb=400, quality=85, k=0.9) -> str: + """ + :说明: + + 不改变图片尺寸压缩到指定大小,输出 base64 ,完成后自动删除文件 + + :参数: + + * ``outfile: str``: 文件目录 + * ``kb=150``: 目标文件大小,单位:KB + + :返回: + + base64 + + :用法: + + .. code-block:: python + + compress_image(outfile=C:/xxx) + + """ + o_size = os.path.getsize(outfile) // 1024 + if o_size <= kb: + return outfile + + ImageFile.LOAD_TRUNCATED_IMAGES = True # type: ignore + while o_size > kb: + im = Image.open(outfile) + x, y = im.size + out = im.resize((int(x*k), int(y*k)), Image.ANTIALIAS) + try: + out.save(outfile, quality=quality) + except Exception as e: + print(e) + break + o_size = os.path.getsize(outfile) // 1024 + return outfile |