前言

我们的生活已完全离不开一维码和二维码,本文会简单的介绍如果通过python的方法来生成它们

本文环境:

Python 2.7.10
pyBarcode==0.7
Pillow==5.1.0

一维码

安装

pip install pyBarcode
pip install Pillow

生成到文件中

(env) python manage.py shell
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

>>> from barcode.writer import ImageWriter  
>>> from barcode.codex import Code39  
>>> from PIL import Image, ImageDraw, ImageFont, ImageWin  
>>> imagewriter = ImageWriter()  
>>> ean = Code39("1234567890", writer=imagewriter, add_checksum=False)  
>>> fullname = ean.save('image')  
>>> img = Image.open(fullname)  
>>> img.show()

首先我们导入Code39,pyBarcode支持多种方式,可用下面命令获取

>>> import barcode
>>> barcode.PROVIDED_BARCODES
['code39', 'ean', 'ean13', 'ean8', 'gs1', 'gtin', 'isbn', 'isbn10', 'isbn13', 'issn', 'jan', 'pzn', 'upc', 'upca']

add_checksum 表示是否将checksum添加到code中

ean.save()参数为文件名,这个文件名可以是绝对路径或者相对路径。

最后,调用了PIL的Image来显示这个生成的图片,如下:

生成到StringIO中

>>> from StringIO import StringIO
>>> i = StringIO()
>>> ean = Code39("0987654321", writer=imagewriter, add_checksum=False)
>>> ean.write(i)
>>> f = StringIO(i.getvalue())
>>> img1 = Image.open(f)
>>> print 'save to StringIO and show with image format'
save to StringIO and show with image format
>>> img1.show()

图片打开时是从StringIO中把内容读出来。

参数配置

从上面图片效果看,文字离一维码距离实在太远了,需要调整一下。差了一下,基本的Writer有下面选项,还有继承类的SVGWritr和ImageWriter等,对我的需要来说,基本的就够了,可以通过调整text_distance和font_size来调整效果

有两种方法可以将这个选项参数传递给Writer

All writer take the following options (specified as keyword arguments to Barcode.save(filename, option=value) or set via Writer.set_options(option=value)).

实际使用中,Writer.set_options并没有生效,不确定是否我的方法用错了。

options = {"text_distance":1, "font_size":12}
imagewriter = ImageWriter()
imagewriter.set_options(options=options)

改用Barcode.save方法

options = {"text_distance":1, "font_size":12}
ean = Code39(filename, writer=imagewriter, add_checksum=False)
ean.save(fullpath,options=options)

图片效果如下

详细内容可查看https://pythonhosted.org/pyBarcode/writers/index.html

更改编码类型

生成的二维码太密了,手机扫描很麻烦 待续......