feat: Add Web iface with QR codes

This commit is contained in:
Piotr Gaczkowski 2026-03-24 14:27:32 +01:00
parent eccb167461
commit 6fdb8433ce
10 changed files with 1293 additions and 739 deletions

View file

@ -1,3 +1,4 @@
import qrcode
import textwrap
from string import ascii_letters
@ -7,9 +8,16 @@ from labeler.domain.objects import Image, LabelDefinition
from labeler.interfaces import Renderer
DPI = 360.0
def points_to_pixels(point_size: float):
return int(point_size * (72 / DPI))
class PILRenderer(Renderer):
def __init__(self):
self.font_path = "/Library/Fonts/Arial.ttf"
self.font_path = "/Library/Fonts/Arial Unicode.ttf"
def render_label(self, label_definition: LabelDefinition) -> Image:
if label_definition.length is None:
@ -47,7 +55,7 @@ class PILRenderer(Renderer):
while text_height > 0:
font = ImageFont.truetype(
"/Library/Fonts/Arial.ttf",
"/Library/Fonts/Arial Unicode.ttf",
text_height,
)
if lines_to_print > 1:
@ -74,6 +82,42 @@ class PILRenderer(Renderer):
)
return im
def render_qrcode(self, label_definition: LabelDefinition) -> Image:
width = label_definition.pixel_width
length = label_definition.pixel_length
text = label_definition.text
font = self.__get_font_for_qr()
qr = qrcode.QRCode(box_size=7)
qr.add_data(f"https://hs3.pl/db/{text}")
qr.make(fit=True)
qr_img = qr.make_image()
print(width, length)
pil_image = PILImage.new("1", (width, length), 1)
draw = ImageDraw.Draw(pil_image)
pil_image.paste(qr_img)
draw.text(
(width / 2, 232),
"HS3-DB",
font=font,
fill=0,
anchor="mm",
align="center",
)
draw.text(
(20, 232 + 34),
f"ID: {text}",
font=font,
fill=0,
align="left",
)
return Image.from_pil(pil_image.transpose(PILImage.Transpose.ROTATE_90))
def __get_font_for_qr(self):
font_size = int(360 / 9)
return ImageFont.truetype("fonts/SourceCodePro-SemiBold.ttf", font_size)
def __get_font(self, text: str, max_width: int, max_length: int):
font_size = max_width
step = max_width // 2