Package: qrcode
Pure python QR Code generatorGenerate QR codes.A standard install usespypngto generate PNG files and can also render QR
codes directly to the console. A standard install is just:pip install qrcodeFor more image functionality, install qrcode with thepildependency so
thatpillowis installed and can be used for generating images:pip install "qrcode[pil]"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)UsageFrom the command line, use the installedqrscript:qr "Some text" > test.pngOr in Python, use themakeshortcut function:importqrcodeimg=qrcode.make('Some data here')type(img)# qrcode.image.pil.PilImageimg.save("some_file.png")Advanced UsageFor more control, use theQRCodeclass. For example:importqrcodeqr=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")Theversionparameter is an integer from 1 to 40 that controls the size of
the QR Code (the smallest, version 1, is a 21x21 matrix).
Set toNoneand use thefitparameter when making the code to determine
this automatically.fill_colorandback_colorcan change the background and the painting
color of the QR, when using the default image factory. Both parameters accept
RGB color tuples.img=qr.make_image(back_color=(255,195,235),fill_color=(55,95,35))Theerror_correctionparameter controls the error correction used for the
QR Code. The following four constants are made available on theqrcodepackage:ERROR_CORRECT_LAbout 7% or less errors can be corrected.ERROR_CORRECT_M(default)About 15% or less errors can be corrected.ERROR_CORRECT_QAbout 25% or less errors can be corrected.ERROR_CORRECT_H.About 30% or less errors can be corrected.Thebox_sizeparameter controls how many pixels each “box” of the QR code
is.Theborderparameter controls how many boxes thick the border should be
(the default is 4, which is the minimum according to the specs).Other image factoriesYou can encode as SVG, or use a new pure Python image processor to encode to
PNG images.The Python examples below use themakeshortcut. The sameimage_factorykeyword argument is a valid option for theQRCodeclass for more advanced
usage.SVGYou 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.svgOr in Python:importqrcodeimportqrcode.image.svgifmethod=='basic':# Simple factory, just a set of rects.factory=qrcode.image.svg.SvgImageelifmethod=='fragment':# Fragment factory (also just a set of rects)factory=qrcode.image.svg.SvgFragmentImageelse:# Combined path factory, fixes white space that may occur when zoomingfactory=qrcode.image.svg.SvgPathImageimg=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.SvgPathFillImageTheQRCode.make_image()method forwards additional keyword arguments to the
underlying ElementTree XML library. This helps to fine tune the root element of
the resulting SVG:importqrcodeqr=qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage)qr.add_data('Some data')qr.make(fit=True)img=qr.make_image(attrib={'class':'some-css-class'})You can convert the SVG image into strings using theto_string()method.
Additional keyword arguments are forwarded to ElementTreestostring():img.to_string(encoding='unicode')Pure Python PNGIf Pillow is not installed, the default image factory will be a pure Python PNG
encoder that usespypng.You can use the factory explicitly from your command line:qr --factory=png "Some text" > test.pngOr in Python:importqrcodefromqrcode.image.pureimportPyPNGImageimg=qrcode.make('Some data here',image_factory=PyPNGImage)Styled ImageWorks only withversions>=7.2 (SVG styled images require 7.4).To apply styles to the QRCode, use theStyledPilImageor one of the
standardSVGimage factories. These accept an optionalmodule_drawerparameter to control the shape of the QR Code.These QR Codes are not guaranteed to work with all readers, so do some
experimentation and set the error correction to high (especially if embedding
an image).Other PIL module drawers:For SVGs, useSvgSquareDrawer,SvgCircleDrawer,SvgPathSquareDrawer, orSvgPathCircleDrawer.These all accept asize_ratioargument which allows for “gapped” squares or
circles by reducing this less than the default ofDecimal(1).TheStyledPilImageadditionally accepts an optionalcolor_maskparameter to change the colors of the QR Code, and an optionalembeded_image_pathto embed an image in the center of the code.Other color masks:Here is a code example to draw a QR code with rounded corners, radial gradient
and an embedded image:importqrcodefromqrcode.image.styledpilimportStyledPilImagefromqrcode.image.styles.moduledrawers.pilimportRoundedModuleDrawerfromqrcode.image.styles.colormasksimportRadialGradiantColorMaskqr=qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_L)qr.add_data('Some data')img_1=qr.make_image(image_factory=StyledPilImage,module_drawer=RoundedModuleDrawer())img_2=qr.make_image(image_factory=StyledPilImage,color_mask=RadialGradiantColorMask())img_3=qr.make_image(image_factory=StyledPilImage,embeded_image_path="/path/to/image.png")ExamplesGet the text content fromprint_ascii:importioimportqrcodeqr=qrcode.QRCode()qr.add_data("Some text")f=io.StringIO()qr.print_ascii(out=f)f.seek(0)print(f.read())Theadd_datamethod will append data to the current QR object. To add new data by replacing previous content in the same object, first use clear method:importqrcodeqr=qrcode.QRCode()qr.add_data('Some data')img=qr.make_image()qr.clear()qr.add_data('New data')other_img=qr.make_image()Pipe ascii output to text file in command line:qr --ascii "Some data" > "test.txt"
cat test.txtAlternative to piping output to file to avoid PowerShell issues:# qr "Some data" > test.png
qr --output=test.png "Some data"Change log7.4.2 (6 February 2023)Allowpypngfactory to allow for saving to a string (likeqr.save("some_file.png")) in addition to file-like objects.7.4.1 (3 February 2023)Fix bad over-optimization in v7.4 that broke large QR codes. Thanks to
mattiasj-axis!7.4 (1 February 2023)Restructure the factory drawers, allowing different shapes in SVG image
factories as well.Add a--factory-draweroption to theqrconsole script.Optimize the output for theSVGPathImagefactory (more than 30% reduction
in file sizes).Add apypngimage factory as a pure Python PNG solution. Ifpillowisnotinstalled, then this becomes the default factory.Thepymagingimage factory has been removed, but its factory shortcut and
the actual PymagingImage factory class now just link to the PyPNGImage
factory.7.3.1 (1 October 2021)Improvements for embedded image.7.3 (19 August 2021)Skip color mask if QR is black and white7.2 (19 July 2021)Add Styled PIL image factory, allowing different color masks and shapes in QR codesSmall performance inprovementAdd check for border size parameter7.1 (1 July 2021)Add –ascii parameter to command line interface allowing to output ascii when stdout is pipedAdd –output parameter to command line interface to specify output fileAccept RGB tuples in fill_color and back_colorAdd to_string method to SVG imagesReplace inline styles with SVG attributes to avoid CSP issuesAdd Python3.10 to supported versions7.0 (29 June 2021)Drop Python < 3.6 support.6.1 (14 January 2019)Fix short chunks of data not being optimized to the correct mode.Tests fixed for Python 36.0 (23 March 2018)Fix optimize length being ignored inQRCode.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.MakeBaseImage.get_image()actually work.5.2 (25 Jan 2016)Add--error-correctionoption 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.6Fix terminal output to display correctly on MS command line.5.2.1Small fix to terminal output in Python 3 (and fix tests)5.2.2Revert 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)Makeqrscript 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 theqrscript 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 aprint_asciimethod and use it as the default for theqrscript rather thanprint_tty.5.0.1Update 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.1Fix the pymaging backend not able to save the image to a buffer. Thanks ilj!4.0.2Fix incorrect regex causing a comma to be considered part of the alphanumeric
set.Switch to using setuptools for setup.py.4.0.3Fix bad QR code generation due to the regex comma fix in version 4.0.2.4.0.4Bad version number for previous hotfix release.3.1 (12 Aug 2013)Important fixes for incorrect matches of the alphanumeric encoding mode.
Previously, the pattern would match if a single line was alphanumeric 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.1Update change log to contain version 3.1 changes. :PGive theqrscript an--optimizeargument 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 installlxml).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.1Fix 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.1Fix a packaging issue2.4.2Added ashowmethod to the PIL image wrapper so therun_examplefunction 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.1Encode 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.Addedborderparameter to allow customizing of the number of boxes used to
create the border of the QR code2.1 (17 Jan 2012)Added aqrscript which can be used to output a qr code to the tty using
background colors, or to a file via a pipe.