Skip to content
Snippets Groups Projects
Commit 1e337f5a authored by Jonas Leder's avatar Jonas Leder
Browse files

initial commit

parents
No related branches found
No related tags found
No related merge requests found
from python:3.11.4-alpine3.18@sha256:0a56f24afa1fc7f518aa690cb8c7be661225e40b157d9bb8c6ef402164d9faa7
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt
COPY ./main.py /app/main.py
WORKDIR /app
CMD ["python", "main.py"]
\ No newline at end of file
main.py 0 → 100644
from http.server import BaseHTTPRequestHandler, HTTPServer
from json import loads
from PIL import Image, ImageDraw, ImageFont
class WebServer(BaseHTTPRequestHandler):
def sendErrorMessage(self, message, statusCode = 400):
self.send_response(statusCode)
self.send_header('Content-Type','text/plain')
self.end_headers()
self.wfile.write(message.encode('utf-8'))
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
try:
data = loads(post_data)
print(data)
except ValueError:
self.sendErrorMessage("Invalid JSON")
return
if "text" not in data:
self.sendErrorMessage("Text Parameter not found")
return
if "width" not in data:
self.sendErrorMessage("Width Parameter not found")
return
if "height" not in data:
self.sendErrorMessage("Height Parameter not found")
return
width = data["width"]
height = data["height"]
text = data["text"]
if "fontSize" in data:
fontSize = data["fontSize"]
else:
fontSize = 15
if "lineSpacing" in data:
lineSpacing = data["lineSpacing"]
else:
lineSpacing = 0
img = Image.new('P', (width, height))
palette = [
255, 255, 255, # white
0, 0, 0, # black
255, 0, 0 # red
]
img.putpalette(palette)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("/usr/share/fonts/TTF/DejaVuSans-Bold.ttf", fontSize)
for i, line in enumerate(text):
color = line["color"]
draw.text((0, 0 + (fontSize + lineSpacing) * i), line["text"], fill=color, font=font)
self.send_response(200)
self.send_header('Content-Type','image/jpeg')
self.end_headers()
rgb_image = img.convert('RGB')
rgb_image.save(self.wfile, "JPEG", optimize=False, quality=100, progressive=False, subsampling=0, icc_profile=None)
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type','text/plain')
self.end_headers()
self.wfile.write(b'Text to Image Server')
if __name__ == "__main__":
webServer = HTTPServer(("0.0.0.0", 8080), WebServer)
print("Server started")
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
\ No newline at end of file
pillow
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment