今回はコマンドラインからバーコードを生成してみましょう。以前、QRコードを生成しました。

・第91回「QRコードを生成」
https://news.mynavi.jp/techplus/article/natonakucommand-91/

バーコードはQRコードよりも歴史が古く今でも現役で広く使われています。高性能なQRコードに置き換わってもよいのでは?と思う人もいるかもしれませんが、狭い領域などではやはりバーコードが活躍します。
バーコードは無理にコマンドラインから生成しなくても各種ツールやアプリを使えば十分に用に足りることもあるでしょう。ここらへんは状況に応じて使い分ければよいと思います。

zintのインストール(Linux)

コマンドラインからバーコードを生成する方法はいくつかありますが今回はzintを使います。

・zint
https://zint.org.uk/
  • https://zint.org.uk/

    https://zint.org.uk/

 すでにzintが入っているかどうかは以下のコマンドを入力します。インストールされていればzintのバージョンが表示されます。インストールされていない場合はコマンドが見つかりません、といったメッセージが表示されます。

zint --version

まず、ラズベリーパイにインストールしてみましょう。以下のようにコマンドを入力します。

sudo apt update
sudo apt upgrade -y

アップデートが終わったら、以下のようにコマンドを入力します。

sudo apt install zint -y

正常にインストールされたか確認します。以下のようにコマンドを入力します。

zint --version

zintのインストール(macOS)

次にmacOSにzintをインストールします。macOSの場合、あらかじめHomebrewをインストールしておきます。

・Homebrew
https://brew.sh/ja/
  • https://brew.sh/ja/

    https://brew.sh/ja/

brewがインストールされていない場合は以下のコマンドを入力します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brewがインストールされたら(もしくはされているか確認するには)以下のようにコマンドを入力します。バージョンが表示されれば正常にインストールされています。

brew --version

brewがインストールされていれば以下のコマンドを入力するとzintがインストールされます。

brew install zint

正常にインストールされたか確認します。以下のようにコマンドを入力します。

zint --version

zintでバーコードを生成する(EAN-13/JANコード/ISBNコード)

それではzintでバーコードを生成してみましょう。ここでは広く使われているEAN-13 (European Article Number 13) 、日本だとJANコードのネーミングの方が馴染みがあるかもしれません。なお、バーコードリーダー(アプリ)によってはEAN-128と認識されてしまうこともあります。

EAN-13は一般的な商品に付いているバーコードです。13桁の数字で構成され、最初の2桁は国コード、次の5桁はメーカーコード、さらに次の5桁は製品コード、最後の1桁はチェックデジットになっています。

それではバーコードを生成してみましょう。生成されたバーコードは画像になります。ここではデスクトップ上にあるsampleディレクトリ内にバーコード画像を生成し保存します。生成時にパスを指定するのも面倒なのでデスクトップ上にsampleディレクトリを作成し、そこをカレントディレクトリとします。samppleディレクトリはGUIでフォルダとして作成しても構いません。sampleディレクトリを作成したら以下のコマンドでsampleディレクトリをカレントディレクトリとします。環境によってはデスクトップの名称が異なっているかもしれません。その場合は適宜読み替えて以下のコマンドを入力してください。

cd ~/Desktop/sample

バーコードを生成するにはdオプションの後にバーコードの文字列を指定し、その後にoオプションで生成するバーコード画像のファイル名(ファイルパス)を指定します。
以下のように指定すると指定したバーコードがカレントディレクトリにb1.pngという名前で生成されます。

zint -d "4987246601955" -o b1.png

次に書籍で使用されているISBN-13コード(以下ISBNコード)を生成してみましょう。ISBNコードを生成する場合も先ほどと同様にオプション等を指定します。手持ちの書籍などのバーコードを指定し生成させてみてもよいでしょう。

zint -d "9784839987664" -o b2.png

zintでQRを生成する

zintはバーコードだけでなくQRコードも生成することができます。QRコードを生成する場合はbオプションを使い58を指定します。
以下のように指定するとmyNaviのQRコードが生成されます。

zint -b 58 -d "myNavi" -o q1.png

QRコードを読み取れるアプリやカメラで撮影すると指定したキーワードが表示されます。URLにしておけばタッチ(タップ/クリック)した場合に該当するURLがブラウザ等で表示されます。

zintは日本語にも対応しています。日本語を使う場合は文字コードを指定する必要があります。日本語の場合はUTF-8またはShift JISの文字コードであることをeciオプションで指定する必要があります。eciオプションで指定する文字コードは他にもあり、以下のようになっています。(以下はzintでエラーになった場合に表示される内容です)

  3: ISO/IEC 8859-1 - Latin alphabet No. 1 (default)
  4: ISO/IEC 8859-2 - Latin alphabet No. 2
  5: ISO/IEC 8859-3 - Latin alphabet No. 3
  6: ISO/IEC 8859-4 - Latin alphabet No. 4
  7: ISO/IEC 8859-5 - Latin/Cyrillic alphabet
  8: ISO/IEC 8859-6 - Latin/Arabic alphabet
  9: ISO/IEC 8859-7 - Latin/Greek alphabet
 10: ISO/IEC 8859-8 - Latin/Hebrew alphabet
 11: ISO/IEC 8859-9 - Latin alphabet No. 5 (Turkish)
 12: ISO/IEC 8859-10 - Latin alphabet No. 6 (Nordic)
 13: ISO/IEC 8859-11 - Latin/Thai alphabet
 15: ISO/IEC 8859-13 - Latin alphabet No. 7 (Baltic)
 16: ISO/IEC 8859-14 - Latin alphabet No. 8 (Celtic)
 17: ISO/IEC 8859-15 - Latin alphabet No. 9
 18: ISO/IEC 8859-16 - Latin alphabet No. 10
 20: Shift JIS (JIS X 0208 and JIS X 0201)
 21: Windows 1250 - Latin 2 (Central Europe)
 22: Windows 1251 - Cyrillic
 23: Windows 1252 - Latin 1
 24: Windows 1256 - Arabic
 25: UTF-16BE (High order byte first)
 26: UTF-8
 27: ASCII (ISO/IEC 646 IRV)
 28: Big5 (Taiwan) Chinese Character Set
 29: GB 2312 (PRC) Chinese Character Set
 30: Korean Character Set EUC-KR (KS X 1001:2002)
 31: GBK Chinese Character Set
 32: GB 18030 Chinese Character Set
 33: UTF-16LE (Low order byte first)
 34: UTF-32BE (High order bytes first)
 35: UTF-32LE (Low order bytes first)
170: ISO/IEC 646 Invariant (ASCII subset)
899: 8-bit binary data

 この連載のタイトルを含む文字列のQRコードを生成するには以下のようになります。(UTF-8の文字コードを指定)

zint -b 58 -d "なんとなくコマンド" -o q2.png --eci=26

古いデバイス等の場合はShift JISの方が良いかもしれません。この場合は以下のようになります。Shift JISを指定してもiPhoneなどのカメラでは問題なく日本語として読み取られます。

zint -b 58 -d "なんとなくコマンド" -o q3.png --eci=20

ファイルに記載された値からバーコードを生成する

最後にテキストファイルに記載されたバーコードの値からバーコード画像を生成してみましょう。ここらへんはシェルスクリプトを使うと手軽にできます。

まず、テキストファイルは以下のようなバーコードの値が行単位で入っているものとします。テキストファイルの名前は1.txtとしています。

・1.txt

4987246601955
4573252944010
4972796220404
4953103468689
4901473912790
4901881812958

1行ずつ読み込んで処理するにはforを使います。以下のようにするとファイルに記載された値をバーコードとして生成します。なお、ファイル名はバーコードの値を利用しています。 シェルスクリプト名はbcd1.shとしています。

・bcd1.sh

#!/bin/bash
while read line
do
  zint -d "${line}" -o "${line}.png"
done < "1.txt"

このシェルスクリプトを実行すると以下のように複数のバーコードが生成されます。

上記のシェルスクリプトだと常に読み込むファイル名が1.txtになっていますので、汎用性がありません。そこで、コマンドラインからシェルスクリプトにファイル名をパラメーター(引数)として渡すように改良しましょう。
コマンドラインから渡されるパラメーターは$1、$2、$3のように$の後に数字が付いたものになります。数字が1であれば最初のパラメーター、2であれば2番目のパラメーターという具合になります。

コマンドラインからファイル名をパラメーターとして渡すようにすると先ほどのシェルスクリプトは以下のようになります。シェルスクリプト名はbcd2.shとしています。

・bcd2.sh

#!/bin/bash
while read line
do
  zint -d "${line}" -o "${line}.png"
done < "$1"

シェルスクリプトを実行する場合は以下のようにファイル名をパラメーターとして渡します。

./bcd2.sh 1.txt

シェルスクリプトと組み合わせることで連番のバーコードなどを手軽に生成できます。ここらへんは工夫次第、アイデア次第でしょう。
それでは、また次回。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。