Spaces:
Sleeping
Sleeping
File size: 3,656 Bytes
dcb132a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import io
import re
import flask
import src.functions.config
from PIL import Image, ImageDraw, ImageFont
imageBP = flask.Blueprint("image", __name__)
@imageBP.route("/api/v1/image/<image_type>")
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,
)
|