| | 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")
|
| | extention = flask.request.args.get("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,
|
| | )
|
| |
|