mirror of
https://code.lenaisten.de/Lenaisten/advent22.git
synced 2024-12-24 21:43:00 +00:00
Merge branch 'develop' into feature/refactoring
This commit is contained in:
commit
c8ce12c299
3 changed files with 16 additions and 10 deletions
|
@ -16,9 +16,11 @@ class Server(BaseModel):
|
|||
font: str
|
||||
|
||||
# Monat, während dem der Kalender läuft
|
||||
# TODO penner
|
||||
month: int = 12
|
||||
|
||||
# Alle Türen bleiben noch so viele Monate offen
|
||||
# TODO penner
|
||||
keep_open: int = 3
|
||||
|
||||
|
||||
|
@ -27,6 +29,7 @@ class Puzzle(BaseModel):
|
|||
solution: str
|
||||
|
||||
# Länge des Kalenders
|
||||
# TODO penner
|
||||
days: int = 24
|
||||
|
||||
# Kalenderdefinition
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
import colorsys
|
||||
from dataclasses import dataclass
|
||||
from typing import Self
|
||||
from typing import Self, TypeAlias, cast
|
||||
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
_RGB: TypeAlias = tuple[int, int, int]
|
||||
_XY: TypeAlias = tuple[float, float]
|
||||
|
||||
|
||||
@dataclass
|
||||
class AdventImage:
|
||||
|
@ -44,7 +47,7 @@ class AdventImage:
|
|||
|
||||
async def get_text_box(
|
||||
self,
|
||||
xy: tuple[float, float],
|
||||
xy: _XY,
|
||||
text: str | bytes,
|
||||
font: "ImageFont._Font",
|
||||
anchor: str | None = "mm",
|
||||
|
@ -75,20 +78,20 @@ class AdventImage:
|
|||
async def get_average_color(
|
||||
self,
|
||||
box: tuple[int, int, int, int],
|
||||
) -> tuple[int, int, int]:
|
||||
) -> _RGB:
|
||||
"""
|
||||
Durchschnittsfarbe eines rechteckigen Ausschnitts in
|
||||
einem Bild berechnen
|
||||
"""
|
||||
|
||||
pixel_data = self.img.crop(box).getdata()
|
||||
mean_color: np.ndarray = np.mean(a=pixel_data, axis=0)
|
||||
mean_color: np.ndarray = np.mean(pixel_data, axis=0)
|
||||
|
||||
return tuple(mean_color.astype(int).tolist())
|
||||
return cast(_RGB, tuple(mean_color.astype(int)))
|
||||
|
||||
async def hide_text(
|
||||
self,
|
||||
xy: tuple[float, float],
|
||||
xy: _XY,
|
||||
text: str | bytes,
|
||||
font: "ImageFont._Font",
|
||||
anchor: str | None = "mm",
|
||||
|
@ -128,7 +131,7 @@ class AdventImage:
|
|||
xy=xy,
|
||||
text=text,
|
||||
font=font,
|
||||
fill=text_color,
|
||||
fill=cast(_RGB, text_color),
|
||||
anchor=anchor,
|
||||
**text_kwargs,
|
||||
)
|
||||
|
|
|
@ -2,7 +2,7 @@ import itertools
|
|||
import random
|
||||
import re
|
||||
from io import BytesIO
|
||||
from typing import Any, Self, Sequence
|
||||
from typing import Any, Self, Sequence, cast
|
||||
|
||||
from fastapi import Depends
|
||||
from fastapi.responses import StreamingResponse
|
||||
|
@ -10,7 +10,7 @@ from PIL import Image, ImageFont
|
|||
|
||||
from ..config import Config, get_config
|
||||
from ..dav_common import dav_file_exists, dav_get_file, dav_list_files
|
||||
from ._image import AdventImage
|
||||
from ._image import _XY, AdventImage
|
||||
|
||||
##########
|
||||
# RANDOM #
|
||||
|
@ -99,7 +99,7 @@ async def get_auto_image(
|
|||
|
||||
# Buchstabe verstecken
|
||||
await image.hide_text(
|
||||
xy=tuple(rnd.choices(range(30, 470), k=2)),
|
||||
xy=cast(_XY, tuple(rnd.choices(range(30, 470), k=2))),
|
||||
text=letter,
|
||||
font=ImageFont.truetype(font, 50),
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue