=============================
|
|
Pure python QR Code generator
|
|
=============================
|
|
|
|
Generate QR codes.
|
|
|
|
For a standard install (which will include pillow_ for generating images),
|
|
run::
|
|
|
|
pip install qrcode[pil]
|
|
|
|
.. _pillow: https://pypi.python.org/pypi/Pillow
|
|
|
|
|
|
What is a QR Code?
|
|
==================
|
|
|
|
A Quick Response code is a two-dimensional pictographic code used for its fast
|
|
readability and comparatively large storage capacity. The code consists of
|
|
black modules arranged in a square pattern on a white background. The
|
|
information encoded can be made up of any kind of data (e.g., binary,
|
|
alphanumeric, or Kanji symbols)
|
|
|
|
Usage
|
|
=====
|
|
|
|
From the command line, use the installed ``qr`` script::
|
|
|
|
qr "Some text" > test.png
|
|
|
|
Or in Python, use the ``make`` shortcut function:
|
|
|
|
.. code:: python
|
|
|
|
import qrcode
|
|
img = qrcode.make('Some data here')
|
|
|
|
Advanced Usage
|
|
--------------
|
|
|
|
For more control, use the ``QRCode`` class. For example:
|
|
|
|
.. code:: python
|
|
|
|
import qrcode
|
|
qr = qrcode.QRCode(
|
|
version=1,
|
|
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
|
box_size=10,
|
|
border=4,
|
|
)
|
|
qr.add_data('Some data')
|
|
qr.make(fit=True)
|
|
|
|
img = qr.make_image(fill_color="black", back_color="white")
|
|
|
|
The ``version`` parameter is an integer from 1 to 40 that controls the size of
|
|
the QR Code (the smallest, version 1, is a 21x21 matrix).
|
|
Set to ``None`` and use the ``fit`` parameter when making the code to determine
|
|
this automatically.
|
|
|
|
``fill_color`` and ``back_color`` can change the background and the painting
|
|
color of the QR, when using the default image factory.
|
|
|
|
The ``error_correction`` parameter controls the error correction used for the
|
|
QR Code. The following four constants are made available on the ``qrcode``
|
|
package:
|
|
|
|
``ERROR_CORRECT_L``
|
|
About 7% or less errors can be corrected.
|
|
``ERROR_CORRECT_M`` (default)
|
|
About 15% or less errors can be corrected.
|
|
``ERROR_CORRECT_Q``
|
|
About 25% or less errors can be corrected.
|
|
``ERROR_CORRECT_H``.
|
|
About 30% or less errors can be corrected.
|
|
|
|
The ``box_size`` parameter controls how many pixels each "box" of the QR code
|
|
is.
|
|
|
|
The ``border`` parameter controls how many boxes thick the border should be
|
|
(the default is 4, which is the minimum according to the specs).
|
|
|
|
Other image factories
|
|
=====================
|
|
|
|
You can encode as SVG, or use a new pure Python image processor to encode to
|
|
PNG images.
|
|
|
|
The Python examples below use the ``make`` shortcut. The same ``image_factory``
|
|
keyword argument is a valid option for the ``QRCode`` class for more advanced
|
|
usage.
|
|
|
|
SVG
|
|
---
|
|
|
|
You can create the entire SVG or an SVG fragment. When building an entire SVG
|
|
image, you can use the factory that combines as a path (recommended, and
|
|
default for the script) or a factory that creates a simple set of rectangles.
|
|
|
|
From your command line::
|
|
|
|
qr --factory=svg-path "Some text" > test.svg
|
|
qr --factory=svg "Some text" > test.svg
|
|
qr --factory=svg-fragment "Some text" > test.svg
|
|
|
|
Or in Python:
|
|
|
|
.. code:: python
|
|
|
|
import qrcode
|
|
import qrcode.image.svg
|
|
|
|
if method == 'basic':
|
|
# Simple factory, just a set of rects.
|
|
factory = qrcode.image.svg.SvgImage
|
|
elif method == 'fragment':
|
|
# Fragment factory (also just a set of rects)
|
|
factory = qrcode.image.svg.SvgFragmentImage
|
|
else:
|
|
# Combined path factory, fixes white space that may occur when zooming
|
|
factory = qrcode.image.svg.SvgPathImage
|
|
|
|
img = qrcode.make('Some data here', image_factory=factory)
|
|
|
|
Two other related factories are available that work the same, but also fill the
|
|
background of the SVG with white::
|
|
|
|
qrcode.image.svg.SvgFillImage
|
|
qrcode.image.svg.SvgPathFillImage
|
|
|
|
|
|
Pure Python PNG
|
|
---------------
|
|
|
|
Install the following two packages::
|
|
|
|
pip install git+git://github.com/ojii/pymaging.git#egg=pymaging
|
|
pip install git+git://github.com/ojii/pymaging-png.git#egg=pymaging-png
|
|
|
|
From your command line::
|
|
|
|
qr --factory=pymaging "Some text" > test.png
|
|
|
|
Or in Python:
|
|
|
|
.. code:: python
|
|
|
|
import qrcode
|
|
from qrcode.image.pure import PymagingImage
|
|
img = qrcode.make('Some data here', image_factory=PymagingImage)
|
|
|
|
==========
|
|
Change log
|
|
==========
|
|
|
|
6.0 (23 March 2018)
|
|
===================
|
|
|
|
- Fix optimize length being ignored in ``QRCode.add_data``.
|
|
|
|
- Better calculation of the best mask pattern and related optimizations. Big
|
|
thanks to cryptogun!
|
|
|
|
|
|
5.3 (18 May 2016)
|
|
=================
|
|
|
|
* Fix incomplete block table for QR version 15. Thanks Rodrigo Queiro for the
|
|
report and Jacob Welsh for the investigation and fix.
|
|
|
|
* Avoid unnecessary dependency for non MS platforms, thanks to Noah Vesely.
|
|
|
|
* Make ``BaseImage.get_image()`` actually work.
|
|
|
|
|
|
5.2 (25 Jan 2016)
|
|
=================
|
|
|
|
* Add ``--error-correction`` option to qr script.
|
|
|
|
* Fix script piping to stdout in Python 3 and reading non-UTF-8 characters in
|
|
Python 3.
|
|
|
|
* Fix script piping in Windows.
|
|
|
|
* Add some useful behind-the-curtain methods for tinkerers.
|
|
|
|
* Fix terminal output when using Python 2.6
|
|
|
|
* Fix terminal output to display correctly on MS command line.
|
|
|
|
5.2.1
|
|
-----
|
|
|
|
* Small fix to terminal output in Python 3 (and fix tests)
|
|
|
|
5.2.2
|
|
-----
|
|
|
|
* Revert some terminal changes from 5.2 that broke Python 3's real life tty
|
|
code generation and introduce a better way from Jacob Welsh.
|
|
|
|
|
|
5.1 (22 Oct 2014)
|
|
=================
|
|
|
|
* Make ``qr`` script work in Windows. Thanks Ionel Cristian Mărieș
|
|
|
|
* Fixed print_ascii function in Python 3.
|
|
|
|
* Out-of-bounds code version numbers are handled more consistently with a
|
|
ValueError.
|
|
|
|
* Much better test coverage (now only officially supporting Python 2.6+)
|
|
|
|
|
|
5.0 (17 Jun 2014)
|
|
=================
|
|
|
|
* Speed optimizations.
|
|
|
|
* Change the output when using the ``qr`` script to use ASCII rather than
|
|
just colors, better using the terminal real estate.
|
|
|
|
* Fix a bug in passing bytecode data directly when in Python 3.
|
|
|
|
* Substation speed optimizations to best-fit algorithm (thanks Jacob Welsh!).
|
|
|
|
* Introduce a ``print_ascii`` method and use it as the default for the ``qr``
|
|
script rather than ``print_tty``.
|
|
|
|
5.0.1
|
|
-----
|
|
|
|
* Update version numbers correctly.
|
|
|
|
|
|
4.0 (4 Sep 2013)
|
|
================
|
|
|
|
* Made qrcode work on Python 2.4 - Thanks tcely.
|
|
Note: officially, qrcode only supports 2.5+.
|
|
|
|
* Support pure-python PNG generation (via pymaging) for Python 2.6+ -- thanks
|
|
Adam Wisniewski!
|
|
|
|
* SVG image generation now supports alternate sizing (the default box size of
|
|
10 == 1mm per rectangle).
|
|
|
|
* SVG path image generation allows cleaner SVG output by combining all QR rects
|
|
into a single path. Thank you, Viktor Stískala.
|
|
|
|
* Added some extra simple SVG factories that fill the background white.
|
|
|
|
4.0.1
|
|
-----
|
|
|
|
* Fix the pymaging backend not able to save the image to a buffer. Thanks ilj!
|
|
|
|
4.0.2
|
|
-----
|
|
|
|
* Fix incorrect regex causing a comma to be considered part of the alphanumeric
|
|
set.
|
|
|
|
* Switch to using setuptools for setup.py.
|
|
|
|
4.0.3
|
|
-----
|
|
|
|
* Fix bad QR code generation due to the regex comma fix in version 4.0.2.
|
|
|
|
4.0.4
|
|
-----
|
|
|
|
* Bad version number for previous hotfix release.
|
|
|
|
|
|
3.1 (12 Aug 2013)
|
|
=================
|
|
|
|
* Important fixes for incorrect matches of the alpha-numeric encoding mode.
|
|
Previously, the pattern would match if a single line was alpha-numeric only
|
|
(even if others wern't). Also, the two characters ``{`` and ``}`` had snuck
|
|
in as valid characters. Thanks to Eran Tromer for the report and fix.
|
|
|
|
* Optimized chunking -- if the parts of the data stream can be encoded more
|
|
efficiently, the data will be split into chunks of the most efficient modes.
|
|
|
|
3.1.1
|
|
-----
|
|
|
|
* Update change log to contain version 3.1 changes. :P
|
|
|
|
* Give the ``qr`` script an ``--optimize`` argument to control the chunk
|
|
optimization setting.
|
|
|
|
|
|
3.0 (25 Jun 2013)
|
|
=================
|
|
|
|
* Python 3 support.
|
|
|
|
* Add QRCode.get_matrix, an easy way to get the matrix array of a QR code
|
|
including the border. Thanks Hugh Rawlinson.
|
|
|
|
* Add in a workaround so that Python 2.6 users can use SVG generation (they
|
|
must install ``lxml``).
|
|
|
|
* Some initial tests! And tox support (``pip install tox``) for testing across
|
|
Python platforms.
|
|
|
|
|
|
2.7 (5 Mar 2013)
|
|
================
|
|
|
|
* Fix incorrect termination padding.
|
|
|
|
|
|
2.6 (2 Apr 2013)
|
|
================
|
|
|
|
* Fix the first four columns incorrectly shifted by one. Thanks to Josep
|
|
Gómez-Suay for the report and fix.
|
|
|
|
* Fix strings within 4 bits of the QR version limit being incorrectly
|
|
terminated. Thanks to zhjie231 for the report.
|
|
|
|
|
|
2.5 (12 Mar 2013)
|
|
=================
|
|
|
|
* The PilImage wrapper is more transparent - you can use any methods or
|
|
attributes available to the underlying PIL Image instance.
|
|
|
|
* Fixed the first column of the QR Code coming up empty! Thanks to BecoKo.
|
|
|
|
2.5.1
|
|
-----
|
|
|
|
* Fix installation error on Windows.
|
|
|
|
|
|
2.4 (23 Apr 2012)
|
|
=================
|
|
|
|
* Use a pluggable backend system for generating images, thanks to Branko Čibej!
|
|
Comes with PIL and SVG backends built in.
|
|
|
|
2.4.1
|
|
-----
|
|
|
|
* Fix a packaging issue
|
|
|
|
2.4.2
|
|
-----
|
|
|
|
* Added a ``show`` method to the PIL image wrapper so the ``run_example``
|
|
function actually works.
|
|
|
|
|
|
2.3 (29 Jan 2012)
|
|
=================
|
|
|
|
* When adding data, auto-select the more efficient encoding methods for numbers
|
|
and alphanumeric data (KANJI still not supported).
|
|
|
|
2.3.1
|
|
-----
|
|
|
|
* Encode unicode to utf-8 bytestrings when adding data to a QRCode.
|
|
|
|
|
|
2.2 (18 Jan 2012)
|
|
=================
|
|
|
|
* Fixed tty output to work on both white and black backgrounds.
|
|
|
|
* Added `border` parameter to allow customizing of the number of boxes used to
|
|
create the border of the QR code
|
|
|
|
|
|
2.1 (17 Jan 2012)
|
|
=================
|
|
|
|
* Added a ``qr`` script which can be used to output a qr code to the tty using
|
|
background colors, or to a file via a pipe.
|
|
|
|
|