summaryrefslogtreecommitdiff
path: root/postgresqleu/util/qr.py
blob: 11a64bf7f838eae24c9aa8d2b0c1233dbab05ccf (plain)
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
from PIL import Image
import base64
from io import BytesIO


# Support both the qrcode library (current) and the qrencode one (legacy)
def generate_base64_qr(s, version, requested_size):
    if not version:
        version = 5

    try:
        import qrcode

        qrimage = qrcode.make(s, version=version, border=0)
    except ImportError:
        try:
            import qrencode

            (ver, size, qrimage) = qrencode.encode(s, version=version, level=qrencode.QR_ECLEVEL_M)
        except ImportError:
            return ""

    if qrimage.size[0] != requested_size:
        if qrimage.size[0] < requested_size:
            size = (requested_size // qrimage.size[0]) * qrimage.size[0]
        else:
            size = qrimage.size[0] // (qrimage.size[0] // requested_size + 1)
        qrimage = qrimage.resize((size, size), Image.NEAREST)

    b = BytesIO()
    qrimage.save(b, "png")
    return base64.b64encode(b.getvalue()).decode('ascii')