PythonでQRコードを作成およびスキャンする

QRコード（クイックレスポンスコード）は、物理的な世界とデジタルな世界をつなぐ多用途ツールとして登場しました。連絡先情報やウェブサイトリンクの共有から、支払いの促進や在庫の追跡に至るまで、QRコードはさまざまな分野で応用されています。Pythonの機能を活用することで、ユーザーはパーソナライズされたQRコードの作成を自動化したり、プロジェクトにスキャン機能を統合したりして、効率性とユーザーエンゲージメントを向上させることができます。この記事では、簡単な**Pythonコードを使用してQRコードを作成およびスキャンするプロセスを自動化する方法**を紹介します。

- **[PythonでQRコードを作成する](#pythonでqrコードを作成する)**
- **[PythonでQRコードをスキャンする](#pythonでqrコードをスキャンする)**

この記事で使用する方法には[Spire.Barcode for Python](https://www.e-iceblue.com/Introduce/barcode-for-python.html)が必要です。PyPI：`pip install Spire.Barcode`。

[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)

## PythonでQRコードを作成する
ライブラリの`BarcodeSettings`クラスは、バーコード生成の設定を構成するために使用できます。これらの設定には、バーコードの種類、エンコードするデータ、色、マージン、水平および垂直解像度が含まれます。
これらの設定を完了したら、これらの構成を使用して`BarcodeGenerator`インスタンスを作成できます。その後、ジェネレーターの`GenerateImage()`メソッドを呼び出してバーコード画像を生成できます。
手順は次のとおりです：
1. `BarcodeSettings`、`BarCodeType`、`QRCodeECL`、`BarCodeGenerator`モジュールをインポートします。
2. `BarcodeSettings`オブジェクトを作成します。
3. `BarcodeSettings.Type`プロパティを使用してバーコードの種類をQRコードに設定します。
4. `BarcodeSettings.Data2D`プロパティを使用して2Dバーコードのデータを設定します。
5. `BarcodeSettings`オブジェクトのプロパティを使用してバーコードのその他の属性を設定します。
6. これらの設定に基づいて`BarCodeGenerator`オブジェクトを作成します。
7. `BarCodeGenerator.GenerateImage()`メソッドを使用してQRコード画像を作成します。

### コード例
```python
from spire.barcode import BarcodeSettings, BarCodeType, QRCodeECL, BarCodeGenerator

# 全てのバイトをファイルに書き込む
def WriteAllBytes(fname: str, data):
    with open(fname, "wb") as fp:
        fp.write(data)
    fp.close()

# BarcodeSettings オブジェクトを作成
barcodeSettings = BarcodeSettings()

# バーコードタイプを QR コードに設定
barcodeSettings.Type = BarCodeType.QRCode

# 2D バーコードのデータを設定
barcodeSettings.Data2D = "Hello, World"

# 余白を設定
barcodeSettings.LeftMargin = 0.2
barcodeSettings.RightMargin = 0.2
barcodeSettings.TopMargin = 0.2
barcodeSettings.BottomMargin = 0.2

# 水平解像度を設定
barcodeSettings.DpiX = 500

# 垂直解像度を設定
barcodeSettings.DpiY = 500

# エラー訂正レベルを設定
barcodeSettings.QRCodeECL = QRCodeECL.M

# バーコードにテキストを表示しない
barcodeSettings.ShowText = False

# QR コードの中心にロゴを追加
barcodeSettings.SetQRCodeLogoImage("PDF.png")

# 指定された設定を使用して BarCodeGenerator インスタンスを作成
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# バーコード画像を生成
image = barCodeGenerator.GenerateImage()

# PNG 画像をディスクに書き込む
WriteAllBytes("output/QR-Code.png", image)
```

### 生成結果
![PythonでQRコードを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/cae0471b-38ae-8ff1-7fd5-fcf4ce1e296e.png)

## PythonでQRコードをスキャンする
ライブラリの`BarcodeScanner`クラスは、バーコード画像の認識に使用されます。このクラスはいくつかの方法でバーコードからデータを抽出するためのメソッドを提供しています：

- `ScanOneFile()`: 単一のバーコード画像ファイルをスキャンして、抽出されたデータを返します。
- `ScanFile()`: 指定された画像ファイルに存在するすべてのバーコードをスキャンして、抽出されたデータを返します。
- `ScanStream()`: 画像データのストリームからバーコードをスキャンし、抽出された情報を返します。

以下のコードは、QRコード画像をスキャンする方法を示しています。

QRコードをスキャンする手順は次のとおりです （QRコードのスキャンにはライセンスが必要）：
1. `BarcodeScanner`モジュールをインポートします。
2. `BarcodeScanner.ScanOneFile()`メソッドを使用して1つのQRコードが含まれる画像をスキャンするか、`BarcodeScanner.ScanFile()`メソッドを使用して複数のQRコードが含まれる画像をスキャンします。
3. スキャン結果をテキストファイルに書き込みます。

### コード例
```python
from spire.barcode import BarcodeScanner

License.SetLicenseKey("license key")

# 1つのバーコードを含む画像ファイルをスキャン
result = BarcodeScanner.ScanOneFile("output/QR-Code.png")

# 複数のバーコードを含む画像ファイルをスキャン
# results = BarcodeScanner.ScanFile("QR-Codes.png")

# スキャン結果をテキストファイルに保存
with open("output/QR-Code.txt", "w", encoding="utf-8") as f:
    f.write(result)
```

### スキャン結果
![PythonでQRコードをスキャン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/56833956-ec89-bcf3-94f7-44ecec3b56b9.png)

この記事では、Pythonを使用してQRコードを作成およびスキャンする方法を示しました。

さらに多くのQRコード処理の技術については、[Spire.Barcode for Pythonチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.Barcode-for-Python.html)をご覧ください。