ウェブページでQRコードを読むための解決策を探しています。
PHPといくつかのライブラリ(zxingまたは何か他のもの)QRCodeを使用して生成し、それを紙に印刷したとしましょう。
私が今やりたいのは、ウェブページを通してタブレット/スマートフォンでそれを読み返すことです。そのページを閲覧すると、カメラでQRCodeを狙うように求められ、スキャンされたコンテンツがデコードされたページに送り返されます。
Android/iOSアプリを使用せずにこれを処理するための何かがありますか? QRCodeだけでなく、別のタイプの2Dバーコードでもかまいません。
TY
私はかつてLazarsoftのjsqrcode
で働いたことがあります
それはブラウザでうまく機能しました、そして私は彼がカメラ付きの電話でテストするためにデモを作ったことを知っています。
彼のリポジトリは次のとおりです: https://github.com/LazarSoft/jsqrcode
カメラサポートの場合:CamCanvas APIを使用します: http://www.taboca.com/p/camcanvas/
instascan を使用してQRコードを読み取ることができます。
リリースページからinstascan.min.jsをコピーし、次のコマンドをロードします。
<script type="text/javascript" src="instascan.min.js"></script>
QRコードを読み取るためのサンプルコード。
<!DOCTYPE html>
<html>
<head>
<title>QR Code Reader using Instascan</title>
<script type="text/javascript" src="instascan.min.js"></script>
</head>
<body>
<video id="preview"></video>
<script type="text/javascript">
let scanner = new Instascan.Scanner({ video: document.getElementById('preview') });
scanner.addListener('scan', function (content) {
console.log(content);
});
Instascan.Camera.getCameras().then(function (cameras) {
if (cameras.length > 0) {
scanner.start(cameras[0]);
} else {
console.error('No cameras found.');
}
}).catch(function (e) {
console.error(e);
});
</script>
</body>
</html>
私にとって、LazarSoftを使用したすべてのテストは、すべてのデバイスで失敗しました(正しくフォーカスできませんでした)。そのため、ここで別の解決策を提案します。アプリが必要ですが、既存のアプリなので、デバイスごとに特定のアプリを作成する必要はありません。
ZXingのバーコードスキャナーアプリを使用してください!はい、ネット上のほとんどすべてのソースがあなたに言っていることとは反対に、サーバーへのラウンドトリップなしで可能です。このアプリは、他のスキャナーが故障したさまざまな条件下(Volume +でライトをオンにする)で非常に信頼できることが証明されました。 https://play.google.com/store/apps/details?id=com.google.zxing.client.Android&hl=en
制限:
バーコードスキャナーアプリとそのコールバックメカニズムは現在、Androidとios(その他が計画されています)でのみ機能します。
明らかに、このソリューションは、カメラとアプリがインストールされているデバイスでのみ機能します。
解決策:
http://zxing.appspot.com/scan?...
コールバック:ret=...
を使用すると、コールバックURIを指定できます。これはスキャンを処理するコードのあるサイトです。スキャナーをトリガーしたのと同じサイトを使用できますが、少し複雑になり、ここでは説明しません(サーバーへのラウンドトリップは必要ありません)。 {CODE}
で、スキャンしたデータを挿入する場所を指定します。コールバックURIはエスケープする必要があることに注意してください。
例えば:
http://zxing.appspot.com/scan?ret=http%3A%2F%2Ffoo.com%2Fscan.htm%23%7BCODE%7D
(エスケープなし:...ret=http://foo.com/scan.htm#{CODE}
)
重要:コードを取得するにはアンカー#
を使用する必要があります。そうしないと、ソリューションが機能しません(キャッシュのため、を参照してください)。未満)。
キャッシュマニフェスト:キャッシュマニフェストを作成し、キャッシュされたエントリにscan.htm
を追加し、スキャナーを開くサイト(<html cache="foo.appcache">
)にマニフェストを追加します。ファイルの内容:
CACHE MANIFEST
CACHE:
scan.htm
NETWORK:
*
スキャンを処理します:scan.htm
の例を次に示します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
var code = window.location.hash.substr(1);
...
</script>
</body>
</html>
サイトはキャッシュされているため、サーバーへのラウンドトリップは必要ありません。 #
を使用すると、常に同じサイトにいるため、これは機能します。?code=...
のようなコードを渡す場合は、可能なすべてのコードをキャッシュする必要があります。
Instascan( https://github.com/schmich/instascan )が最近公開され、Lazarsoftと@maracaによるコールバックソリューションの多くの欠点を解決しました。カメラにHTML5を使用し、オフラインで展開できます。