This repository has been archived by the owner on Jan 9, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathinventQryLabel.py
executable file
·104 lines (85 loc) · 3.37 KB
/
inventQryLabel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env python
import qrcode
from PIL import Image, ImageDraw, ImageFont
from subprocess import call
base_url = "http://i.hasi.it/"
class InventQryLabel(object):
def __init__(self, label_size):
self.w = w = label_size[0]
self.h = h = label_size[1]
self.qr_size = (h - 8, h - 8)
self.text_size = (w - h, h)
def mktext(self, string, font, fontsize):
text = Image.new("1", self.text_size, color = 1)
font = ImageFont.truetype(font, fontsize)
draw = ImageDraw.Draw(text)
# TODO perform text fitting and placing
draw.text((0, 0), string, font=font)
return text
def gen_qrcode(self, id):
# generate new qr code
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_Q, # 25% errors correctable
box_size=10,
border=0, # apparently the standard requires 4...
)
qr.add_data(base_url)
qr.add_data(id)
qr.make(fit=True)
code = qr.make_image().resize(self.qr_size)
return code
def generate(self, name, owner, contact, usage_rule, uid):
# create binary (black/white) image
im = Image.new("1", (self.w, self.h), color=1)
code = self.gen_qrcode(uid)
size_s = 18
size_m = 26
size_l = 32
# create font images
name_txt = None
if name == "Harry Plotter":
name_txt = self.mktext(name, "./static/font/harry.ttf", 50)
else:
name_txt = self.mktext(name, "./static/font/Ubuntu-L.ttf", size_l)
owner_label_txt = self.mktext("Owner",
"./static/font/Ubuntu-L.ttf", size_s)
owner_txt = self.mktext("{}".format(owner),
"./static/font/Ubuntu-L.ttf", size_m)
contact_label_txt = self.mktext("Contact",
"./static/font/Ubuntu-L.ttf", size_s)
contact_txt = self.mktext("{}".format(contact),
"./static/font/Ubuntu-L.ttf", size_m)
permissions_label_txt = self.mktext("Permissions",
"./static/font/Ubuntu-L.ttf", size_s)
permissions_txt = self.mktext("{}".format(usage_rule),
"./static/font/Ubuntu-L.ttf", size_m)
# place image parts
offset_x = 15
offset_y = self.h - 142
step_s = 17
step_m = 29
im.paste(name_txt, (offset_x, 0))
posy = offset_y
im.paste(owner_label_txt, (offset_x, posy))
posy += step_s
im.paste(owner_txt, (offset_x, posy))
posy += step_m
im.paste(contact_label_txt, (offset_x, posy))
posy += step_s
im.paste(contact_txt, (offset_x, posy))
posy += step_m
im.paste(permissions_label_txt, (offset_x, posy))
posy += step_s
im.paste(permissions_txt, (offset_x, posy))
im.paste(code, (self.w-self.h + 8, 8))
# output needs to be W < H, so rotate
final = im.rotate(90)
return final
def print(self, image):
image.save("out.pbm")
call([ "bash", "print" ])
if __name__ == "__main__":
inventQryLabel = InventQryLabel((514, 196))
label = inventQryLabel.generate("Name", "Owner", "Contact", "rule", "uid")
inventQryLabel.print(label)