Add .qrcode()
This commit is contained in:
parent
afbad13f51
commit
b0c529725a
|
@ -39,6 +39,8 @@ from boxes import pulley
|
||||||
from boxes import svgutil
|
from boxes import svgutil
|
||||||
from boxes.Color import *
|
from boxes.Color import *
|
||||||
|
|
||||||
|
import qrcode
|
||||||
|
from boxes.qrcode_factory import BoxesQrCodeFactory
|
||||||
|
|
||||||
### Helpers
|
### Helpers
|
||||||
|
|
||||||
|
@ -1533,6 +1535,20 @@ class Boxes:
|
||||||
y * 0.5 * holedistance,
|
y * 0.5 * holedistance,
|
||||||
0.5 * diameter)
|
0.5 * diameter)
|
||||||
|
|
||||||
|
def qrcode(self, content, box_size=1.0, color=Color.ETCHING, move=None):
|
||||||
|
q = qrcode.QRCode(image_factory=BoxesQrCodeFactory, box_size=box_size*10)
|
||||||
|
q.add_data(content)
|
||||||
|
m = q.get_matrix()
|
||||||
|
tw, th = len(m) * box_size, len(m[0]) * box_size
|
||||||
|
print(tw, th)
|
||||||
|
if self.move(tw, th, move, True):
|
||||||
|
return
|
||||||
|
|
||||||
|
self.set_source_color(color)
|
||||||
|
q.make_image(ctx=self.ctx)
|
||||||
|
|
||||||
|
self.move(tw, th, move)
|
||||||
|
|
||||||
@restore
|
@restore
|
||||||
def showBorderPoly(self,border,color=Color.ANNOTATIONS):
|
def showBorderPoly(self,border,color=Color.ANNOTATIONS):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
from decimal import Decimal
|
||||||
|
import qrcode.image.base
|
||||||
|
import qrcode.image.svg
|
||||||
|
|
||||||
|
class BoxesQrCodeFactory(qrcode.image.base.BaseImage):
|
||||||
|
"""
|
||||||
|
SVG image builder
|
||||||
|
Creates a QR-code image as a SVG document fragment.
|
||||||
|
"""
|
||||||
|
_SVG_namespace = "http://www.w3.org/2000/svg"
|
||||||
|
kind = "SVG"
|
||||||
|
allowed_kinds = ("SVG",)
|
||||||
|
|
||||||
|
def __init__(self, *args, ctx=None, x=0, y=0, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.ctx = ctx
|
||||||
|
self.x, self.y = x, y
|
||||||
|
# Save the unit size, for example the default box_size of 10 is '1mm'.
|
||||||
|
self.unit_size = self.units(self.box_size)
|
||||||
|
|
||||||
|
def drawrect(self, row, col):
|
||||||
|
self.ctx.rectangle(*self._rect(row, col))
|
||||||
|
self._img.append(self._rect(row, col))
|
||||||
|
|
||||||
|
def units(self, pixels, text=True):
|
||||||
|
"""
|
||||||
|
A box_size of 10 (default) equals 1mm.
|
||||||
|
"""
|
||||||
|
units = Decimal(pixels) / 10
|
||||||
|
if not text:
|
||||||
|
return units
|
||||||
|
return '%smm' % units
|
||||||
|
|
||||||
|
def save(self, stream, kind=None):
|
||||||
|
self.check_kind(kind=kind)
|
||||||
|
self._write(stream)
|
||||||
|
|
||||||
|
def to_string(self):
|
||||||
|
return f"".join(self._img)
|
||||||
|
|
||||||
|
def new_image(self, **kwargs):
|
||||||
|
self._img = []
|
||||||
|
return self._img
|
||||||
|
|
||||||
|
def _rect(self, row, col):
|
||||||
|
size = self.box_size / 10
|
||||||
|
x = self.x + (row + self.border) * size
|
||||||
|
y = self.y + (col + self.border) * size
|
||||||
|
return x, y, size, size
|
||||||
|
|
||||||
|
def _write(self, stream):
|
||||||
|
stream.write("".join(self._img))
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
import qrcode
|
||||||
|
import qrcode.image
|
||||||
|
q = qrcode.QRCode(image_factory=BoxesQrCodeFactory, box_size=10)
|
||||||
|
q.add_data('hello')
|
||||||
|
ctx = "a context"
|
||||||
|
img = q.make_image(ctx="a context")
|
||||||
|
print(img.to_string())
|
|
@ -3,3 +3,4 @@ markdown
|
||||||
setuptools
|
setuptools
|
||||||
sphinx
|
sphinx
|
||||||
shapely>=1.8.2
|
shapely>=1.8.2
|
||||||
|
qrcode==7.3.1
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
FROM fedora:latest
|
FROM fedora:latest
|
||||||
|
|
||||||
# Install requirements
|
# Install requirements
|
||||||
RUN dnf install -y git-core python3-markdown python3-setuptools python3-affine python3-shapely pstoedit && dnf clean all
|
RUN dnf install -y git-core python3-markdown python3-setuptools python3-affine python3-shapely python3-pillow python3-qrcode pstoedit && dnf clean all
|
||||||
|
|
||||||
# Get Boxes.py sources to /boxes
|
# Get Boxes.py sources to /boxes
|
||||||
ARG BUILD_BRANCH=master
|
ARG BUILD_BRANCH=master
|
||||||
|
|
Loading…
Reference in New Issue