A cleverly named, but very simple python barcode renderer wrapping the
BWIPP library and
ghostscript command line tool.
Install from pip:
pip install treepoem
Python 3.5-3.7 supported.
You'll also need Ghostscript installed. On Ubuntu/Debian this can be installed with:
apt-get install ghostscript
On Mac OS X use:
brew install ghostscript
Otherwise refer to your distribution's package manager, though it's likely to
There's a known issue with rendering on Ghostscript 9.22+ where images are smeared. See GitHub Issue #124 and its associated links for more details. Ghostscript merged a fix in version 9.26 and common barcodes seem to work from then on, though still with some smearing.
You can check your Ghostscript version with:
generate_barcode(barcode_type, data, options=None)
Generates a barcode and returns it as a PIL image file object (specifically, a
barcode_type is the name of the barcode type to generate (see below).
data is a
str (Python 2
bytes (Python 2
of data to embed in the barcode - the amount that can be embedded varies by
options is a dictionary of strings-to-strings of extra options to be passed
to BWIPP, as per its docs.
For example, this generates a QR code image, and saves it to a file using
>>> import treepoem >>> image = treepoem.generate_barcode( ... barcode_type='qrcode', # One of the BWIPP supported codes. ... data='barcode payload', ... ) >>> image.convert('1').save('barcode.png')
If your barcode image is monochrome, with no additional text or
coloring, converting the
Image object to monochrome as shown above
image.convert('1')) will likely reduce its file size.
This is a
dict of the ~100 names of the barcode types that the vendored
version of BWIPP supports: its keys are
strs of the barcode type encoder
names, and the values are instances of
A class representing meta information on the types. It has two attributes:
type_code- the value needed for the
generate_barcode()to use this type.
description- the human level description of the type which has two
Only these common types are used in the test suite:
qrcode- QR Code
azteccode- Aztec Code
interleaved2of5- Interleaved 2 of 5
code128- Code 128
code39- Code 39
Treepoem also includes a simple command-line interface to the
generate_barcode. For example, these commands
will generate two QR codes with identical contents, but different levels
of error correction (see QR Code Options):
$ treepoem -o barcode1.png -t qrcode "This is a test" eclevel=H $ treepoem -o barcode2.png -t qrcode "^084his is a test" eclevel=L parse
Complete usage instructions are shown with
What's so clever about the name?