feat: Add Web iface with QR codes
This commit is contained in:
parent
3897d37f2a
commit
2a2b5973df
10 changed files with 1293 additions and 739 deletions
|
|
@ -4,6 +4,7 @@ from math import inf
|
|||
|
||||
from brother_ql import BrotherQLRaster, create_label
|
||||
from brother_ql.backends import guess_backend, backend_factory
|
||||
from brother_ql.conversion import convert
|
||||
from pysnmp.entity.engine import SnmpEngine
|
||||
from pysnmp.hlapi import getCmd, CommunityData, UdpTransportTarget, ContextData
|
||||
from pysnmp.smi.rfc1902 import ObjectType, ObjectIdentity
|
||||
|
|
@ -43,9 +44,9 @@ class E550W(Printer):
|
|||
im = PILImage.open(io.BytesIO(label.bytes))
|
||||
|
||||
qlr = BrotherQLRaster("PT-E550W")
|
||||
create_label(
|
||||
convert(
|
||||
qlr,
|
||||
im,
|
||||
[im],
|
||||
self.__media_width_to_type(label.height),
|
||||
red=False,
|
||||
threshold=70,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue