「khanamiryan/php-qrcode-detector-decoder」を使うことで読み取りができる。
endroid/qr-code も内部ではこれを呼び出しているみたい
khanamiryan/php-qrcode-detector-decoder: This is a PHP library to detect and decode QR-codes. This is first and only QR code reader that works without extensions.
https://github.com/khanamiryan/php-qrcode-detector-decoder
■実際に導入してみたときのメモ
Composerは「Dropbox\サーバ\XAMPP.txt」の「PHPのComposerを使う」の手順で導入済みとする。
>composer -V
Composer version 2.4.4 2022-10-27 14:39:29
>composer require khanamiryan/qrcode-detector-decoder
以下のコードを作成し、ブラウザからアクセスするとQRコードの読み取り結果が表示される。(エラーへの対応は、後述の「トラブル対応」を参照。)
具体的には「Test message by QrCode.」「
https://refirio.net/」「tel:09012345678」といったテキストを取得できた。
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Zxing\QrReader;
$qrcode = new QrReader('data/test.png'); // QRコードの画像
echo $qrcode->text();
■トラブル対応
GitHubに「PHP >= 8.1」と書かれているものの、PHP8.1環境で実行すると以下のエラーになった。
Fatal error: Declaration of Zxing\GDLuminanceSource::isCropSupported() must be compatible with Zxing\LuminanceSource::isCropSupported(): bool
in /var/www/html/qrcode-read/vendor/khanamiryan/qrcode-detector-decoder/lib/GDLuminanceSource.php on line 169
PHPUnitのsetUp()を使ったら「must be compatible」とエラーが表示される - Qiita
https://qiita.com/ismt7/items/fcc898f38ee161b38ef4
vendor\khanamiryan\qrcode-detector-decoder\lib\GDLuminanceSource.php
の169行目を以下のように調整してみる。
public function isCropSupported()
↓
public function isCropSupported(): bool
これで読み取り結果を表示できた。