61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
import os, sys, shutil
|
|
from PIL import Image
|
|
from flask import Response
|
|
from werkzeug.exceptions import BadRequest
|
|
from ..utils.HTTP import no_content
|
|
|
|
thumbnail_sizes = ((32, 32), (64, 64), (128, 128), (256, 256), (512, 512))
|
|
|
|
|
|
def save_picture(picture, path):
|
|
|
|
if not picture.mimetype.startswith("image/"):
|
|
raise BadRequest
|
|
os.makedirs(path, exist_ok=True)
|
|
file_type = picture.mimetype.replace("image/", "")
|
|
filename = f"{path}/drink"
|
|
with open(f"{filename}.{file_type}", "wb") as file:
|
|
file.write(picture.binary)
|
|
image = Image.open(f"{filename}.{file_type}")
|
|
if file_type != "png":
|
|
image.save(f"{filename}.png", "PNG")
|
|
os.remove(f"{filename}.{file_type}")
|
|
for thumbnail_size in thumbnail_sizes:
|
|
work_image = image.copy()
|
|
work_image.thumbnail(thumbnail_size)
|
|
work_image.save(f"{filename}-{thumbnail_size[0]}.png", "PNG")
|
|
|
|
def get_no_image():
|
|
path = os.path.dirname(__file__)
|
|
with open(f"{path}/no-image.png", "rb") as file:
|
|
image = file.read()
|
|
response = Response(image, mimetype="image/png")
|
|
response.add_etag()
|
|
return response
|
|
|
|
def get_picture(path, size=None):
|
|
try:
|
|
if size:
|
|
if os.path.isfile(f"{path}/drink-{size}.png"):
|
|
with open(f"{path}/drink-{size}.png", "rb") as file:
|
|
image = file.read()
|
|
else:
|
|
_image = Image.open(f"{path}/drink.png")
|
|
_image.thumbnail((size, size))
|
|
image = bytearray()
|
|
_image.save(bytearray, format='PNG')
|
|
else:
|
|
with open(f"{path}/drink.png", "rb") as file:
|
|
image = file.read()
|
|
response = Response(image, mimetype="image/png")
|
|
response.add_etag()
|
|
return response
|
|
except:
|
|
get_no_image()
|
|
|
|
|
|
|
|
|
|
def delete_picture(path):
|
|
shutil.rmtree(path)
|