this code creates jpg and png image qrcodes for three digit serial numbers and appends below the serial number at the qr code for ease of both machine and human interpretation. As set up it gives the 200 qr codes for str(100) through str(299), because I didn't need anymore than that but it would be easy to modify
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
def make_qrcode(some_text, directory) :
|
|
'''this turns some text data into a qrcode'''
|
|
import qrcode
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
from os import chdir, listdir
|
|
chdir(directory)
|
|
if type(some_text) != str :
|
|
print('input', some_text, 'is not a string')
|
|
raise TypeError
|
|
myfont = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeSansBold.ttf',40)
|
|
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_Q, box_size=10, border=1)
|
|
print('data=',some_text)
|
|
qr.add_data(some_text)
|
|
qr.make()
|
|
img = qr.make_image()
|
|
img_w, img_h = img.size
|
|
background = Image.new('RGB',(290,290),(255,255,255))
|
|
bg_w, bg_h = background.size
|
|
offset = ((bg_w - img_w) // 2, 0)
|
|
background.paste(img, offset)
|
|
I1 = ImageDraw.Draw(background)
|
|
I1.text((120,250),str(some_text),font=myfont,fill=0)
|
|
print(type(background))
|
|
background.save(some_text + '.jpg')
|
|
background.save(some_text + '.png')
|
|
return
|
|
|
|
if __name__ == '__main__' :
|
|
for indx in range(100,400) :
|
|
name = str(indx).zfill(3)
|
|
make_qrcode(name, '/home/tomtaylor/exams_/qrcodes')
|