Pythonでバーコードを生成するには?
帳票作成のプログラムを書いている時などでバーコードを生成して利用したい機会があると思います。Pythonではbarcodeモジュールを利用することにより簡単にバーコードを生成することが可能となっています。
本記事では、Pythonでバーコードを作成する関数を紹介します。
Pythonでバーコードを生成するサンプルコード
create_barcode関数のサンプルコードを紹介します。
# pip install python-barcode
# バーコードの生成に使用されるライブラリ
import barcode
# バーコードを画像として出力するためのライブラリ
from barcode.writer import ImageWriter
# バイナリデータをメモリ上で扱うためのライブラリ
from io import BytesIO
# pip install pillow
# Python Imaging Library (PIL) は、画像処理機能を提供
from PIL import Image
def create_barcode(data, filename=None, barcode_format='ean13'):
"""
指定されたデータを含むバーコードを画像として生成し、PIL.Image.Imageオブジェクトとして返す関数。
この関数は `python-barcode` ライブラリを使用して、指定されたデータ(数字など)からバーコードを生成します。
生成されたバーコードは、PIL.Image.Imageオブジェクトとしてメモリ上に生成され、返されます。
オプションで、生成されたバーコードの画像ファイル名を指定することもできます。
Args:
data (str): バーコードにエンコードするデータ。数字のみ。
filename (str, optional): 生成されたバーコードの画像ファイル名。指定されない場合はファイルに保存されません。
barcode_format (str, optional): 生成するバーコードの形式。デフォルトは 'ean13'。
Returns:
PIL.Image.Image: 生成されたバーコードのイメージオブジェクト。
"""
# 指定されたフォーマットのバーコードクラスを取得
barcode_class = barcode.get_barcode_class(barcode_format)
# バーコードオブジェクトの生成。ImageWriterを使用して画像として出力可能にする
barcode_obj = barcode_class(data, writer=ImageWriter())
if filename:
# filenameが存在したら指定されたファイル名でバーコードを保存
barcode_obj.save(filename)
# メモリ上に画像データを格納するためのバッファ
output_image = BytesIO()
# バーコードの画像データをバッファに書き込む
barcode_obj.write(output_image)
# バッファの読み取り位置を最初に戻す
output_image.seek(0)
# PILライブラリを使用して画像オブジェクトを生成
barcode_image = Image.open(output_image)
# 生成したイメージオブジェクトを返す
return barcode_image
##############################################################
# 関数のテスト
if __name__ == "__main__":
# JANコード(EAN-13フォーマット)を生成するテストコード ※ファイルを作成しない、デフォルト ean13
# test_data = "4901301336316"
# barcode_image = create_barcode(test_data, "barcode_ean13_4901301336316", "ean13")
# barcode_image.show() # 画像を表示
### 以下からすべてpngファイルを作成します
# JANコード(EAN-13フォーマット)を生成するテストコード
test_data = "4901750404857"
barcode_image = create_barcode(test_data, "barcode_ean13", "ean13")
barcode_image.show() # 画像を表示
# JANコード(EAN-8フォーマット)を生成するテストコード
test_data = "49747157"
barcode_image = create_barcode(test_data, "barcode_ean8", "ean8")
barcode_image.show() # 画像を表示
# NW-7(Codabarフォーマット)を生成するテストコード
test_data = "A123456B" # Codabarバーコードのテストデータ。開始/終了文字にはA、B、C、Dが使用されます。
barcode_image = create_barcode(test_data, "barcode_codabar", "codabar")
barcode_image.show() # 画像を表示
# CODE128 を生成するテストコード
test_data = "Code128 !#$%&'()" # 数字(0 ~ 9),アルファベット大文字/小文字,記号,制御文字
barcode_image = create_barcode(test_data, "barcode_code128", "code128")
barcode_image.show() # 画像を表示
# ISBN13 を生成するテストコード
test_data = "978-4061473515"
barcode_image = create_barcode(test_data, "barcode_isbn13", "isbn13")
barcode_image.show() # 画像を表示
# ITF を生成するテストコード
test_data = "1234567890" # 数字(0 ~ 9)のみ
barcode_image = create_barcode(test_data, "barcode_itf", "itf")
barcode_image.show() # 画像を表示
サンプルを実行する前にbarcode、pillowのインストールが必要ですのでインストールしていない場合には対応してください。
pip install python-barcode
pip install pillow
実行結果
実行すると6つのバーコードが作成されて画面に表示されます。
1つめ JANコード(EAN-13フォーマット)
POSシステム等で利用されていて日本ではJANコードとして広まっていますが、もともとはEAN(European Article Number)の略で、もともとヨーロッパで始まったシステムで現在では世界的な商品識別コードとして利用されています。
2つめ JANコード(EAN-8フォーマット)
コード幅を小さくできるのでチロルチョコなどの小さい商品で利用されています。
3つめ NW-7(Codabarフォーマット)
宅配便の配送伝票などで利用されています。利点は単純さと古いバーコードスキャナーでも読み取れること、他のバーコードシステムに比べて読み取り精度が高いためエラーが発生しにくいという特徴があります。
4つめ CODE128
アスキーコード128文字を全てバーコード化でき、高い情報密度を持つバーコードの一種でアルファベット(大文字・小文字)数字、記号など多くの文字を表現できるため幅広い用途に使用されています。このフォーマットは商品の追跡や在庫管理などに役立てられていて段ボールなどにラベル貼り付けされている際によく見るコードです。
5つめ ISBN13
書籍の裏表紙に印刷されるバーコードで、書店や図書館での販売や貸出の処理が迅速に行われます。また、ISBNは書籍を特定しオンラインで検索したり購入したりする際にも非常に役立つコードです。
6つめ ITF
主に倉庫や物流業界で使われていて、数字のみを扱うことができ特にダンボール箱やパレットなど、大量の商品を追跡するのに適しているコードです。
最後に
Pythonではbarcodeモジュールを利用することにより比較的簡単にバーコードを生成することが可能となっています。
最近では情報量の多いQRコードを利用することが多くなりましたが、バーコードリーダーの価格はQRコードと比較すると安く、製造業・流通業で多く利用されています。
バーコードを生成して業務利用に生かしてみてはいかがでしょうか。
また、QRコードを出力する・画像入りQRコードを出力する記事もありますので興味のある方は参照してみてはいかがでしょうか。
コメント