FreeLighting / ops.py
刘宇轩
update
431e52f
raw
history blame
2.2 kB
import base64
import json
import requests
from io import BytesIO
import re, os
from PIL import Image
from datetime import datetime
import random
import socket
r_b64_prefix = r'^data:image/.+;base64,'
from PIL import ImageOps
def resize_keep_hw_rate(image, tar_res):
w, h = image.size
if w > h:
tar_w = tar_res
tar_h = int(tar_w * h / w)
elif h > w:
tar_h = tar_res
tar_w = int(tar_h * w / h)
else:
tar_w = tar_res
tar_h = tar_res
image = image.resize((tar_w, tar_h), Image.LANCZOS)
return image
def decode_img_from_url(url):
import requests
from io import BytesIO
for _ in range(5):
try:
content = requests.get(url, stream=True, timeout=10).content
img = Image.open(BytesIO(content))
img = ImageOps.exif_transpose(img)
break
except Exception as e:
print_with_datetime(f"url decode error {url} {str(e)}")
img = None
return img
def make_sub_file_folder(file_path):
subdir = file_path.split(os.path.basename(file_path))[0]
os.makedirs(subdir, exist_ok=True)
def get_random_file_name():
timing_cur = datetime.now().timestamp() * 1000000
timing_cur = str(int(timing_cur)) + f'-{random.randint(0,99999999)}'
return timing_cur
def print_with_datetime(string):
print(f'{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}: {string}', flush=True)
def b64_pil(base64Data, mode = 'RGB'):
try:
base64Data = re.sub(r_b64_prefix, '', base64Data)
imgData = base64.b64decode(base64Data)
image = Image.open(BytesIO(imgData))
except:
image = None
return image
def pil_b64(pil_img, fmt='jpeg', quality=75):
output_buffer = BytesIO()
pil_img.save(output_buffer, format=fmt, quality=quality)
byte_data = output_buffer.getvalue()
base64_str = base64.b64encode(byte_data).decode('utf-8')
if fmt == 'jpeg':
fmt_out = 'jpg'
else:
fmt_out = fmt
return f'data:image/{fmt_out};base64,' + base64_str
def get_ip():
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
return ip_address