fix Pillow related issues
This commit is contained in:
parent
ec3f846c01
commit
510edf5818
3 changed files with 12 additions and 8 deletions
|
|
@ -4,11 +4,13 @@ from typing import Self, TypeAlias, cast
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
from PIL.Image import Resampling
|
||||||
|
|
||||||
from .config import Config
|
from .config import Config
|
||||||
|
|
||||||
_RGB: TypeAlias = tuple[int, int, int]
|
_RGB: TypeAlias = tuple[int, int, int]
|
||||||
_XY: TypeAlias = tuple[float, float]
|
_XY: TypeAlias = tuple[float, float]
|
||||||
|
_Box: TypeAlias = tuple[int, int, int, int]
|
||||||
|
|
||||||
|
|
||||||
@dataclass(slots=True, frozen=True)
|
@dataclass(slots=True, frozen=True)
|
||||||
|
|
@ -42,7 +44,7 @@ class AdventImage:
|
||||||
return cls(
|
return cls(
|
||||||
img.resize(
|
img.resize(
|
||||||
size=(cfg.image.size, cfg.image.size),
|
size=(cfg.image.size, cfg.image.size),
|
||||||
resample=Image.LANCZOS,
|
resample=Resampling.LANCZOS,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -50,10 +52,10 @@ class AdventImage:
|
||||||
self,
|
self,
|
||||||
xy: _XY,
|
xy: _XY,
|
||||||
text: str | bytes,
|
text: str | bytes,
|
||||||
font: "ImageFont._Font",
|
font: ImageFont.FreeTypeFont,
|
||||||
anchor: str | None = "mm",
|
anchor: str | None = "mm",
|
||||||
**text_kwargs,
|
**text_kwargs,
|
||||||
) -> "Image._Box | None":
|
) -> _Box | None:
|
||||||
"""
|
"""
|
||||||
Koordinaten (links, oben, rechts, unten) des betroffenen
|
Koordinaten (links, oben, rechts, unten) des betroffenen
|
||||||
Rechtecks bestimmen, wenn das Bild mit einem Text
|
Rechtecks bestimmen, wenn das Bild mit einem Text
|
||||||
|
|
@ -78,14 +80,15 @@ class AdventImage:
|
||||||
|
|
||||||
async def get_average_color(
|
async def get_average_color(
|
||||||
self,
|
self,
|
||||||
box: "Image._Box",
|
box: _Box,
|
||||||
) -> tuple[int, int, int]:
|
) -> tuple[int, int, int]:
|
||||||
"""
|
"""
|
||||||
Durchschnittsfarbe eines rechteckigen Ausschnitts in
|
Durchschnittsfarbe eines rechteckigen Ausschnitts in
|
||||||
einem Bild berechnen
|
einem Bild berechnen
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pixel_data = self.img.crop(box).getdata()
|
pixel_data = np.asarray(self.img.crop(box))
|
||||||
|
print(pixel_data)
|
||||||
mean_color: np.ndarray = np.mean(pixel_data, axis=0)
|
mean_color: np.ndarray = np.mean(pixel_data, axis=0)
|
||||||
|
|
||||||
return cast(_RGB, tuple(mean_color.astype(int)))
|
return cast(_RGB, tuple(mean_color.astype(int)))
|
||||||
|
|
@ -94,7 +97,7 @@ class AdventImage:
|
||||||
self,
|
self,
|
||||||
xy: _XY,
|
xy: _XY,
|
||||||
text: str | bytes,
|
text: str | bytes,
|
||||||
font: "ImageFont._Font",
|
font: ImageFont.FreeTypeFont,
|
||||||
anchor: str | None = "mm",
|
anchor: str | None = "mm",
|
||||||
**text_kwargs,
|
**text_kwargs,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ class TTFont:
|
||||||
size: int = 50
|
size: int = 50
|
||||||
|
|
||||||
@property
|
@property
|
||||||
async def font(self) -> "ImageFont._Font":
|
async def font(self) -> ImageFont.FreeTypeFont:
|
||||||
return ImageFont.truetype(
|
return ImageFont.truetype(
|
||||||
font=BytesIO(await WebDAV.read_bytes(self.file_name)),
|
font=BytesIO(await WebDAV.read_bytes(self.file_name)),
|
||||||
size=100,
|
size=100,
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ from typing import Any, Awaitable, Callable, Iterable, Self, Sequence, TypeVar
|
||||||
|
|
||||||
from fastapi.responses import StreamingResponse
|
from fastapi.responses import StreamingResponse
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from PIL.Image import Resampling
|
||||||
|
|
||||||
from .config import get_config
|
from .config import get_config
|
||||||
from .dav.webdav import WebDAV
|
from .dav.webdav import WebDAV
|
||||||
|
|
@ -121,7 +122,7 @@ async def api_return_ico(img: Image.Image) -> StreamingResponse:
|
||||||
|
|
||||||
# JPEG-Daten in Puffer speichern
|
# JPEG-Daten in Puffer speichern
|
||||||
img_buffer = BytesIO()
|
img_buffer = BytesIO()
|
||||||
img.resize(size=(256, 256), resample=Image.LANCZOS)
|
img.resize(size=(256, 256), resample=Resampling.LANCZOS)
|
||||||
img.save(img_buffer, format="ICO")
|
img.save(img_buffer, format="ICO")
|
||||||
img_buffer.seek(0)
|
img_buffer.seek(0)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue