- Added support for Python 3.11 and 3.12.
- Drop support for Python <=3.8.
- Change local development setup to use Poetry.
- Testsuite and code quality checks are done through Github Actions.
- Code quality and formatting utilises ruff.
- Removed
typing_extensions
as a dependency, as it's no longer required with having Python 3.9+ as a requirement. - Only allow high error correction rate (qrcode.ERROR_CORRECT_H) when generating QR codes with embedded images to ensure content is readable
- Allow
pypng
factory to allow for saving to a string (likeqr.save("some_file.png")
) in addition to file-like objects.
- Fix bad over-optimization in v7.4 that broke large QR codes. Thanks to mattiasj-axis!
- Restructure the factory drawers, allowing different shapes in SVG image factories as well.
- Add a
--factory-drawer
option to theqr
console script. - Optimize the output for the
SVGPathImage
factory (more than 30% reduction in file sizes). - Add a
pypng
image factory as a pure Python PNG solution. Ifpillow
is not installed, then this becomes the default factory. - The
pymaging
image factory has been removed, but its factory shortcut and the actual PymagingImage factory class now just link to the PyPNGImage factory.
- Improvements for embedded image.
- Skip color mask if QR is black and white
- Add Styled PIL image factory, allowing different color masks and shapes in QR codes
- Small performance inprovement
- Add check for border size parameter
- Add --ascii parameter to command line interface allowing to output ascii when stdout is piped
- Add --output parameter to command line interface to specify output file
- Accept RGB tuples in fill_color and back_color
- Add to_string method to SVG images
- Replace inline styles with SVG attributes to avoid CSP issues
- Add Python3.10 to supported versions
- Drop Python < 3.6 support.
- Fix short chunks of data not being optimized to the correct mode.
- Tests fixed for Python 3
- Fix optimize length being ignored in
QRCode.add_data
. - Better calculation of the best mask pattern and related optimizations. Big thanks to cryptogun!
- 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.
- 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.
- Small fix to terminal output in Python 3 (and fix tests)
- 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.
- 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+)
- 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 theqr
script rather thanprint_tty
.
- Update version numbers correctly.
- 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.
- Fix the pymaging backend not able to save the image to a buffer. Thanks ilj!
- Fix incorrect regex causing a comma to be considered part of the alphanumeric set.
- Switch to using setuptools for setup.py.
- Fix bad QR code generation due to the regex comma fix in version 4.0.2.
- Bad version number for previous hotfix release.
- 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.
- Update change log to contain version 3.1 changes. :P
- Give the
qr
script an--optimize
argument to control the chunk optimization setting.
- 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.
- Fix incorrect termination padding.
- 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.
- 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.
- Fix installation error on Windows.
- Use a pluggable backend system for generating images, thanks to Branko Čibej! Comes with PIL and SVG backends built in.
- Fix a packaging issue
- Added a
show
method to the PIL image wrapper so therun_example
function actually works.
- When adding data, auto-select the more efficient encoding methods for numbers and alphanumeric data (KANJI still not supported).
- Encode unicode to utf-8 bytestrings when adding data to a QRCode.
- 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
- 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.