Spaces:
Sleeping
Sleeping
import io | |
import re | |
import flask | |
import src.functions.config | |
from PIL import Image, ImageDraw, ImageFont | |
imageBP = flask.Blueprint("image", __name__) | |
async def imageFunction(image_type): | |
text = flask.request.args.get("text") # TEXT | |
extention = flask.request.args.get("extention") # EXTENTION | |
if image_type == "poster": | |
img = Image.new("RGB", (342, 513), color=(255, 255, 255)) | |
draw = ImageDraw.Draw(img) | |
font_size = 1 | |
font = ImageFont.truetype( | |
font="./build/fonts/Roboto-Regular.ttf", size=font_size | |
) | |
img_fraction = 0.9 | |
breakpoint = img_fraction * img.size[0] | |
jumpsize = 75 | |
while True: | |
if font.getsize(text)[0] < breakpoint: | |
font_size += jumpsize | |
else: | |
jumpsize = jumpsize // 2 | |
font_size -= jumpsize | |
font = ImageFont.truetype( | |
font="./build/fonts/Roboto-Regular.ttf", size=font_size | |
) | |
if jumpsize <= 1: | |
break | |
width, height = draw.textsize(text, font=font) | |
draw.text( | |
((342 - width) / 2, (513 - height) / 2), text, fill="black", font=font | |
) | |
output = io.BytesIO() | |
img.save(output, format=extention) | |
output.seek(0, 0) | |
return flask.send_file( | |
output, mimetype="image/%s" % (extention), as_attachment=False | |
) | |
elif image_type == "backdrop": | |
img = Image.new("RGB", (1280, 720), color=(255, 255, 255)) | |
draw = ImageDraw.Draw(img) | |
font_size = 1 | |
font = ImageFont.truetype( | |
font="./build/fonts/Roboto-Regular.ttf", size=font_size | |
) | |
img_fraction = 0.9 | |
breakpoint = img_fraction * img.size[0] | |
jumpsize = 75 | |
while True: | |
if font.getsize(text)[0] < breakpoint: | |
font_size += jumpsize | |
else: | |
jumpsize = jumpsize // 2 | |
font_size -= jumpsize | |
font = ImageFont.truetype( | |
font="./build/fonts/Roboto-Regular.ttf", size=font_size | |
) | |
if jumpsize <= 1: | |
break | |
width, height = draw.textsize(text, font=font) | |
draw.text( | |
((1280 - width) / 2, (720 - height) / 2), text, fill="black", font=font | |
) | |
output = io.BytesIO() | |
img.save(output, format=extention) | |
output.seek(0, 0) | |
return flask.send_file( | |
output, mimetype="image/%s" % (extention), as_attachment=False | |
) | |
elif image_type == "thumbnail": | |
id = flask.request.args.get("id") | |
config, drive = src.functions.credentials.refreshCredentials( | |
src.functions.config.readConfig() | |
) | |
params = { | |
"fileId": id, | |
"fields": "thumbnailLink", | |
"supportsAllDrives": True, | |
} | |
res = drive.files().get(**params).execute() | |
if res.get("thumbnailLink"): | |
thumbnail = re.sub(r"(s[^s]*)$", "s3840", res["thumbnailLink"]) | |
return flask.redirect(thumbnail, code=302) | |
else: | |
return ( | |
flask.jsonify( | |
{ | |
"code": 500, | |
"content": None, | |
"message": "The thumbnail does not exist on Google's servers.", | |
"success": False, | |
} | |
), | |
500, | |
) | |