def details(request, type, qr_id): qr = get_qr_object(type, qr_id) context = { "qrcode": qr, "type": type } if request.method == "GET": buff = io.BytesIO() segno.make(qr.generate_QR(), error="H").save(buff, kind="png", scale=15) encoded = base64.b64encode(buff.getvalue()).decode() context.update({"qr_img": encoded}) return render(request, f"qrcodes/qrdetails{type}.html", context) if request.method == "POST": qr.name = request.POST["name"] if type == "web": qr.url = request.POST["url"] elif type == "wifi": qr.wifiname = request.POST["wifiname"] qr.wifipassword = request.POST["password"] qr.wifitype = request.POST["type"] elif type == "vcard": qr.firstname = request.POST["firstname"] qr.lastname = request.POST["lastname"] qr.email = request.POST["email"] qr.phone = request.POST["phone"] qr.save() return redirect(request.get_full_path())
def test_encoding(): encoding = 'iso-8859-15' data = 'Émetteur' qr = segno.make(data.encode(encoding)) assert qr.mode == 'byte' qr2 = segno.make(data, encoding=encoding) assert qr2 == qr
def create_qr(self): self.new_file = filedialog.asksaveasfilename( initialdir="/", title="SAVE", defaultextension=".png", filetypes=[('png files', '*.png'), ('svg files', '*.svg'), ('eps files', '*.eps'), ('txt files', '*.txt')]) if self.new_file != "": name, self.ex = os.path.splitext(self.new_file) if self.version.get() not in lista and self.version.get().isdigit( ): ver = int(self.version.get()) self.microcode = False else: ver = self.version.get() self.microcode = True try: if self.ex != ".txt": qr = segno.make(self.display.get('1.0', END), version=ver, micro=self.microcode) qr.save(self.new_file, scale=self.size.get(), dark=self.SQblack, light=self.SQwhite) else: qr = segno.make(self.display.get('1.0', END), micro=self.microcode) qr.save(self.new_file) messagebox.showinfo("TASK COMPLETED", "Code created successfully") except Exception as e: messagebox.showwarning("ERROR", str(e))
def qrcode_svg(): data = request.args.get('data') if data not in ('Savoy Truffle', 'Rocky Raccoon'): return abort(404) buff = io.BytesIO() segno.make(data, micro=False).save(buff, kind='svg', scale=4) buff.seek(0) return send_file(buff, mimetype='image/svg+xml')
def test_make_micro_overflow(): data = 'A' * 21 # Max. 21 alphanumeric chars (M4-L) qr = segno.make(data, micro=True) assert 'M4-L' == qr.designator data += 'A' with pytest.raises(segno.DataOverflowError) as ex: segno.make(data, micro=True) assert 'too large' in str(ex.value)
def qrcode_png(): data = request.args.get('data') if data not in ('Savoy Truffle', 'Rocky Raccoon'): return abort(404) buff = io.BytesIO() segno.make(data, micro=False) \ .save(buff, kind='png', scale=4, dark='darkblue', data_dark='#474747', light='#efefef') buff.seek(0) return send_file(buff, mimetype='image/png')
def test_enforce_qrcode(): content = 'HELLO WORLD' qr = segno.make(content) assert qr.is_micro assert 'M3' == qr.version qr = segno.make_qr(content) assert not qr.is_micro assert 1 == qr.version qr = segno.make(content, micro=False) assert not qr.is_micro assert 1 == qr.version
def test_pyqrcode_issue76(): # See <https://github.com/mnooner256/pyqrcode/issues/76> content = 'АБВГД' qr = segno.make(content, micro=False) assert 'kanji' == qr.mode assert content == decode(qr) qr = segno.make(content, encoding='utf-8', micro=False) assert 'byte' == qr.mode assert content == decode(qr) qr = segno.make(content.encode('utf-8'), micro=False) assert 'byte' == qr.mode assert content == decode(qr)
def test_pil_palette_autodetect(): qr = segno.make('Segno') img = qr.to_pil(dark='#00fc', light=None, border=0) assert img assert 'P' == img.mode, 'Expected indexed-color image' assert qr.symbol_size(border=0) == img.size assert 'transparency' in img.info
def encode_to_qr_codes(self): print "Encoding data to QR codes.........", start_time = time.time() size = len(self.data) # Divide data into n 2953-byte parts data = [ self.data[i:i + ColorQRCode.MAX_BYTES] for i in range(0, len(self.data), ColorQRCode.MAX_BYTES) ] # If the number of divided parts exceed 24, # it is not compatible if len(data) > 24: return -1 # Encode the data to QR codes for i in range(len(data)): self.qr_codes.append( segno.make(str(data[i]), version=40, error='l', mask=0)) # Creates a maximum binary value depending on the # amount of QR codes created in order to # allow white colors to appear self.max_bin = '1' * len(data) print "Done: ", print("%s seconds" % (time.time() - start_time)) print "QR Code Parts: " + str(len(data))
def run(): timestamp = int(time.time() * 1000) frames = [] # type: List[Image] for i in range(30): salt = "635124" id = "53214253214321" content = salt + id + str(timestamp) print(content) timestamp += 100 qr = segno.make(content, error="M", micro=False) fn = f"out/{i}.png" img = qr.save(fn, scale=10, light="#ffffff", dark="#8697AC") frame = Image.open(fn).convert("P") frames.append(frame) print(frames) frames[0].save( "qr.gif", # format="GIF", append_images=frames[1:], save_all=True, duration=100, loop=0, )
def writePNG(datfile, pngfile): with open(datfile, "rb") as f: content = f.read() print(len(content)) qr = segno.make(content, encoding=None, eci=True) print(qr) qr.save(pngfile)
def handle_qr(self): self.send_response(200) self.send_header('Content-Type', 'image/png') self.end_headers() qr_code = segno.make('Hello Moto') content = self.qr_template.format(qr_code.png_data_uri()) self.wfile.write(content)
def test_matrix_iter_verbose_border_zero(): qr = segno.make('No border') res = [ bytearray([bool(v >> 8) for v in row]) for row in qr.matrix_iter(border=0, verbose=True) ] assert qr.matrix == tuple(res)
def test_matrix_iter_border_default(): qr = segno.make('A', version=1) res = [bytearray(row) for row in qr.matrix_iter(border=None)] top_border = [bytearray([0x0] * 29)] * 4 seq = bytearray([0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0]) assert top_border == res[:4] assert seq == res[4][:len(seq)]
def build_qrcode(self, to_encode=None, module_color=None, background_color=None, scale_factor=None): '''Create base QR Code''' if not (self.to_encode or to_encode): # If we have no data, we can't do anything. return # If any data has changed, save it. if to_encode: self.to_encode = to_encode if module_color: self.module_color = module_color if background_color: self.background_color = background_color if scale_factor: self.scale_factor = scale_factor self.QRsvg = io.BytesIO() self.qr = segno.make(self.to_encode, micro=False, error='H') # saving base qr code to StringIO buffer self.qr.save(self.QRsvg, color=self.module_color, background=self.background_color, kind='svg') self.fig_qr = sg.fromstring(self.QRsvg.getvalue()) self.qr_size = float(self.fig_qr.get_size() [0]) # only grab first size because it's a square self.middle = (self.qr_size * self.scale_factor) / 2 # typically not an integer
def test_matrix_iter_border_3(): qr = segno.make('A', version=1) res = [bytearray(row) for row in qr.matrix_iter(border=3)] top_border = [bytearray([0x0] * 27)] * 3 seq = bytearray([0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0]) assert top_border == res[:3] assert seq == res[3][:len(seq)]
def test_stackoverflow_issue(): # See <https://stackoverflow.com/questions/63303624/generating-and-reading-qr-codes-with-special-characters> # and <https://github.com/NaturalHistoryMuseum/pyzbar/issues/14> content = 'Thomsôn Gonçalves Ámaral,325.432.123-21' qr = segno.make(content, encoding='utf-8') assert 'byte' == qr.mode assert content == decode(qr).encode('shift-jis').decode('utf-8')
def add_totp(request): if request.profile.totp: # TOTP is already configured, refuse to continue return HttpResponseBadRequest() if "totp_secret" not in request.session: request.session["totp_secret"] = pyotp.random_base32() totp = pyotp.totp.TOTP(request.session["totp_secret"]) if request.method == "POST": form = forms.TotpForm(totp, request.POST) if form.is_valid(): request.profile.totp = request.session["totp_secret"] request.profile.totp_created = now() request.profile.save() request.session["enabled_totp"] = True request.session.pop("totp_secret") return redirect("hc-profile") else: form = forms.TotpForm(totp) uri = totp.provisioning_uri(name=request.user.email, issuer_name=settings.SITE_NAME) qr_data_uri = segno.make(uri).png_data_uri(scale=8) ctx = { "form": form, "qr_data_uri": qr_data_uri, "secret": request.session["totp_secret"], } return render(request, "accounts/add_totp.html", ctx)
def plot_qr_code(): """ Turn the request's URL into a QR code, so another user can join the observation session """ qr = segno.make(request.url) return qr
def render_data(self, ctx, data): # Generate QR Code import segno qr = segno.make(data, **self.qr_parameters) matrix = list(qr.matrix) del qr # Add quiet zone quiet_data = [()] * self.quiet_zone matrix = quiet_data + [ quiet_data + list(row) + quiet_data for row in matrix ] + quiet_data qr_height, qr_width = len(matrix), max(len(row) for row in matrix) scale_factor = min(self.field_width / qr_width, self.field_height / qr_height) if self.max_module_size: scale_factor = min(scale_factor, self.max_module_size) ctx.save() try: ctx.translate( Alignment.CENTER.align_offset(self.field_width, qr_width * scale_factor) + self.padding_left, Alignment.CENTER.align_offset(self.field_height, qr_height * scale_factor) + self.padding_top) ctx.scale(scale_factor, scale_factor) self._render_matrix(ctx, matrix) finally: ctx.restore()
def test_matrix_iter_border_3(): qr = segno.make('A', version=1) res = [bytearray(row) for row in qr.matrix_iter(border=3)] top_border = [bytearray([0x0] * 27)] * 3 # border finder seq = bytearray([0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0]) assert top_border == res[:3] assert seq == res[3][:len(seq)]
def test_matrix_iter_border_default(): qr = segno.make('A', version=1) res = [bytearray(row) for row in qr.matrix_iter(border=None)] top_border = [bytearray([0x0] * 29)] * 4 # border finder seq = bytearray([0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0]) assert top_border == res[:4] assert seq == res[4][:len(seq)]
def qr_colors(id, grade): #qr = segno.make(id, micro=False) qr = segno.make(f"ecotag.herokuapp.com/oi/{id}", error='h') qr.to_artistic(background=f'static/base/{grade}.png', target=f"static/{id}.png", scale=10) #qr.save(f"static/{id}.png",scale = 10) return qr
def test_force_hanzi_mode2(): qr = segno.make( '大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,' '惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,' '雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。', mode='hanzi') assert 'hanzi' == qr.mode assert '9-L' == qr.designator
def test_version_1_1(): qr = segno.make('Test') out = io.BytesIO() qr.save(out, svgversion=1.1, kind='svg', color='#0000ffcc') root = _parse_xml(out) assert '1.1' == root.get('version') assert b'stroke-opacity' in out.getvalue() assert b'rgba(' not in out.getvalue()
def test_version_2_0(): qr = segno.make('Test') out = io.BytesIO() qr.save(out, svgversion=2.0, kind='svg', color='#0000ffcc') root = _parse_xml(out) assert root.get('version') is None assert b'stroke-opacity' not in out.getvalue() assert b'rgba(' in out.getvalue()
def test_version_1_1(): qr = segno.make('Test') out = io.BytesIO() qr.save(out, svgversion=1.1, kind='svg', dark='#0000ffcc') root = _parse_xml(out) assert '1.1' == root.get('version') assert b'stroke-opacity' in out.getvalue() assert b'rgba(' not in out.getvalue()
def make_qr(text: Any, qr_code_options: QRCodeOptions): """Creates a QR code :rtype: segno.QRCode """ # WARNING: For compatibility reasons, we still allow to pass __proxy__ class (lazy string). Moreover, it would be OK to pass anything that has __str__ # attribute (e. g. class instance that handles phone numbers). return segno.make(str(text), **qr_code_options.kw_make())
def test_version_2_0(): qr = segno.make('Test') out = io.BytesIO() qr.save(out, svgversion=2.0, kind='svg', dark='#0000ffcc') root = _parse_xml(out) assert root.get('version') is None assert b'stroke-opacity' not in out.getvalue() assert b'rgba(' in out.getvalue()
def save(self, *args, **kwargs): latitude = self.get_address_data().latitude longitude = self.get_address_data().longitude buffer = BytesIO() qr_code_img = segno.make('https://www.google.pl/maps/place/{},{}'.format(latitude, longitude)) qr_code_img.save(buffer, kind='png', light='#FFFFFF', scale=5) self.qr_code.save(f'{self.user}-qrcode.png', ContentFile(buffer.getvalue()), save=False) self.city_district = self.get_address_data().raw['address']['city_district'] super().save(*args, **kwargs)
def decode(data): scale = 3 qrcode = segno.make(data, micro=False) width, height = qrcode.symbol_size(scale=scale) qr_bytes = qr_to_bytes(qrcode, scale) decoded = zbardecode((qr_bytes, width, height)) assert 1 == len(decoded) assert 'QRCODE' == decoded[0].type return decoded[0].data.decode('utf-8')
def test_plugin(): distribution = pkg_resources.Distribution(os.path.dirname(__file__)) entry_point = pkg_resources.EntryPoint.parse( 'test = test_plugin:an_example_plugin', dist=distribution) distribution._ep_map = {'segno.plugin.converter': {'test': entry_point}} pkg_resources.working_set.add(distribution) qr = segno.make('The Beatles') assert 'works' == qr.to_test()
def generate_code(url, filename): import segno if not os.path.exists(CONFIG.QRCODES): os.makedirs(CONFIG.QRCODES) imagefile = os.path.join(CONFIG.QRCODES, '{0}.png'.format(filename)) generated_qr = segno.make(url) generated_qr.save(imagefile, scale=10) return imagefile
def test_symbol_size(): qr = segno.make('Hello world', micro=False) width, height = 21, 21 border = 0 assert (width, height) == qr.symbol_size(border=border) border = 1 assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size(border=border) border = 4 # (default border) assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size() assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size(scale=1) assert (_calc_size(width, border, 4), _calc_size(width, border, 4)) == qr.symbol_size(scale=4) border = 0 assert (_calc_size(width, border, 4), _calc_size(width, border, 4)) == qr.symbol_size(border=border, scale=4)
def test_symbol_size_micro(): qr = segno.make('A', version='m2') width, height = 13, 13 # Micro QR Code Version M2 size border = 0 assert (width, height) == qr.symbol_size(border=border) border = 1 dim = _calc_size(width, border) assert (dim, dim) == qr.symbol_size(border=border) border = 2 # (default border) dim = _calc_size(width, border) assert (dim, dim) == qr.symbol_size() assert (dim, dim) == qr.symbol_size(scale=1) dim = _calc_size(width, border, 4) assert (dim, dim) == qr.symbol_size(scale=4) border = 0 dim = _calc_size(width, border, 4) assert (dim, dim) == qr.symbol_size(border=border, scale=4)
def test_eq(): qr = segno.make('Hello') qr2 = segno.make('Hello') assert qr == qr2
def test_data_too_large(data, version): with pytest.raises(DataOverflowError): segno.make(data, version=version)
def test_issue_18_zero_automatic(): qr = segno.make(0) assert 'M1' == qr.version assert 'numeric' == qr.mode assert qr.error is None
def test_issue_18_automatic(): qr = segno.make('') assert 'M3' == qr.version assert 'byte' == qr.mode assert 'M' == qr.error
def test_matrix_iter_invalid_border(border): qr = segno.make('A') with pytest.raises(ValueError): for row in qr.matrix_iter(border=border): pass
def test_illegal_error_level_micro(): with pytest.raises(ErrorLevelError): segno.make('test', error='H', micro=True)
def test_encoding_latin1(): qr = segno.make('Märchenbücher', error='m', encoding='latin1', micro=False) assert 1 == qr.version assert 'byte' == qr.mode
def test_valid_mode_autodetection_auto(data, expected_mode): qr = segno.make(data) assert expected_mode == qr.mode
def test_legal_error_levels(error): qr = segno.make(1, error=error, boost_error=False) assert error.upper() == qr.error
def test_valid_versions(version): qr = segno.make(1, version=version) assert int(version) == qr.version assert not qr.is_micro
def test_m3_wikipedia(): qr = segno.make('Wikipedia', version='m3') assert 'M3-L' == qr.designator ref_matrix = read_matrix('issue-33-m3-l-wikipedia') assert ref_matrix == qr.matrix
def test_valid_mirco_versions(version): qr = segno.make(1, version=version) assert version.upper() == qr.version assert qr.is_micro
def test_illegal_version(version): with pytest.raises(VersionError): segno.make('a', version=version)
def test_neq(): qr = segno.make('Hello') qr2 = segno.make('hello') assert qr == qr assert qr2 == qr2 assert qr != qr2
def test_version_contradicts_micro(version): with pytest.raises(VersionError): segno.make(1, version=version, micro=True)
def test_m1_has_no_error_level(): qr = segno.make('1') assert qr.is_micro assert 'M1' == qr.version assert qr.error is None
def test_illegal_mode_micro(version, mode): with pytest.raises(ModeError): segno.make(1, version=version, mode=mode) with pytest.raises(ModeError): segno.make(1, version=version.lower(), mode=mode)
def test_default_encoding(): qr = segno.make('Märchenbücher', error='m', micro=False) # 1 since the data fits into version 1 if ISO/IEC 8859-1 (the default # encoding) is used assert 1 == qr.version assert 'byte' == qr.mode
def test_matrix_iter_border_zero(): qr = segno.make('No border') res = [bytearray(row) for row in qr.matrix_iter(border=0)] assert qr.matrix == tuple(res)
def test_encoding_utf8(): qr = segno.make('Märchenbücher', error='m', encoding='utf-8', micro=False) assert 2 == qr.version assert 'byte' == qr.mode
def test_illegal_error_level(error): with pytest.raises(ErrorLevelError): segno.make(1, error=error)
def test_dpi_negative(): qr = segno.make('test') out = io.BytesIO() with pytest.raises(ValueError): qr.save(out, kind='png', dpi=-3)
def test_error_m1(): qr = segno.make('12') assert 'M1' == qr.version assert qr.error is None