This is a wrapper for the ZXing barcode library. (It's a "slightly less quick-and-dirty" fork of oostendo/python-zxing.) It will allow you to read and decode barcode images from Python.
Use the Python 3 version of pip (usually invoked via pip3
) to install: pip3 install zxing
- You'll neeed to have a recent
java
binary somewhere in your path. (Tested with OpenJDK.) - pip will automatically download the relevant JAR files for the Java ZXing libraries (currently v3.4.0)
The BarCodeReader
class is used to decode images:
>>> import zxing
>>> reader = zxing.BarCodeReader()
>>> barcode = reader.decode("test/barcodes/QR_CODE-easy.png")
>>> print(barcode)
BarCode(raw='This should be QR_CODE', parsed='This should be QR_CODE', format='QR_CODE', type='TEXT', points=[(15.0, 87.0), (15.0, 15.0), (87.0, 15.0), (75.0, 75.0)])
The attributes of the decoded BarCode
object are raw
, parsed
, format
, type
, and points
. The list of formats which ZXing can decode is
here.
The decode()
method accepts an image path and takes optional parameters try_harder
(boolean) and possible_formats
(list of formats to consider).
If no barcode is found, it returns None
, and if it encounters any other recognizable error from the Java ZXing library, it raises BarCodeReaderException
.
The command-line interface can decode images into barcodes and output in either a human-readable or CSV format:
usage: zxing [-h] [-c] [--try-harder] image [image ...]
Human-readable:
$ zxing /tmp/barcode.png
/tmp/barcode.png
================
Decoded TEXT barcode in QR_CODE format.
Raw text: 'Testing 123'
Parsed text: 'Testing 123'
CSV output (can be opened by LibreOffice or Excel):
$ zxing /tmp/barcode1.png /tmp/barcode2.png /tmp/barcode3.png
Filename,Format,Type,Raw,Parsed
/tmp/barcode1.png,CODE_128,TEXT,Testing 123,Testing 123
/tmp/barcode2.png,QR_CODE,URI,http://zxing.org,http://zxing.org
/tmp/barcode3.png,QR_CODE,TEXT,"This text, ""Has stuff in it!"" Wow⏎Yes it does!","This text, ""Has stuff in it!"" Wow⏎Yes it does!"
LGPLv3