Top
Web
Webサイトに小機能を追加していく
WebサイトにQRコードスキャナを載せる
ポイント
WebサイトにQRコードスキャナを載せる
とりあえずWebサイトにQRコードスキャナを搭載してみるための記事
-
Point 1WebサイトでQRコード読み取りユーザがスマホにQRコードリーダーを持っていなくてもWebブラウザだけでQRコードの読み取りが可能です
-
Point 2画像内でのQRコードの位置も取得どこで作られても同じ文字列からは同じQRコードが作られます.また作るのに計算資源は必要ないためブラウザで作成することができます
-
Point 3jsQR.jsを使用WebブラウザでQRコードをスキャンできるjsQR.jsを使用します.他にもこういったライブラリはありますが、どれも同程度の使いやすさです.
ステップ概要
WebサイトにQRコードスキャナを載せる
とりあえずQRコードスキャナをブラウザで動かします.
読み取るだけでなくコードがどこにあるかを描画します
どういった処理になっているかを確認します.
アップロードしたファイルのQRコードを読み取って出力します
ファイルのQRコードを読み取って処理するところを追います.
Step
とりあえずWebサイトにQRコードスキャナを載せる
今回はjsQR.jsを用いてWebカメラに移ったQRコードをブラウザで読み取って結果を表示するプログラムを作成します.
今回は下記のサンプルに基づいて解説を行なっています.
まずはこれから用意するディレクトリ構成です.
今回Webサーバは立ち上げずに行います.
jsQR.jsについては下記で取得して保存してください.
それでは今回使うindex.htmlのソースです.今回は下記のサンプルに基づいて解説を行なっています.
: ブラウザで開く
https://github.com/cozmo/jsQR/tree/master/docs
今回Webサーバは立ち上げずに行います.
Folder : WebカメラQRコードを読み取って結果を表示するためのフォルダ構成
index.html
jsQR.js
jsQR.jsのGithubソース
リンク
下記をメモ帳でindex.htmlとして保存してください.
HTML : Webカメラで撮像した画像からQRコードを読み取るソース
index.html
<html>
<head>
<script src="./jsQR.js"></script>
</head>
<body style="max-width: 640px;margin: 0 auto;">
<canvas id="canvas" style="width:100%"></canvas>
<div id="output">
<div id="outputMessage">No QR code detected.</div>
</div>
<script>
var video = document.createElement("video");
var canvasElement = document.getElementById("canvas");
var canvas = canvasElement.getContext("2d");
navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } }).then(function(stream) {
video.srcObject = stream;
video.setAttribute("playsinline", true);
video.play();
requestAnimationFrame(tick);
});
function tick() {
if (video.readyState === video.HAVE_ENOUGH_DATA) {
canvasElement.height = video.videoHeight;
canvasElement.width = video.videoWidth;
canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height);
var imageData = canvas.getImageData(0, 0, canvasElement.width, canvasElement.height);
var code = jsQR(imageData.data, imageData.width, imageData.height, {
inversionAttempts: "dontInvert",
});
if (code) {
document.getElementById("outputMessage").innerText = code.data;
} else {
document.getElementById("outputMessage").innerText = "No QR code detected.";
}
}
requestAnimationFrame(tick);
}
</script>
</body>
</html>
Webカメラの取得を許可すると画像の取得が始まります.もしQRコードが認識されればその結果が文字列と表示されます.
index.htmlをドラッグ&ドロップしてスキャンしたとき