{"id":4658,"date":"2024-03-08T15:58:07","date_gmt":"2024-03-08T06:58:07","guid":{"rendered":"https:\/\/taitan916.info\/blog\/?p=4658"},"modified":"2024-04-25T14:43:57","modified_gmt":"2024-04-25T05:43:57","slug":"post-4658","status":"publish","type":"post","link":"https:\/\/taitan916.info\/blog\/archives\/4658","title":{"rendered":"JavaScript\u3067Web\u30ab\u30e1\u30e9\u3084\u30b9\u30de\u30db\u30ab\u30e1\u30e9\u3092\u5229\u7528\u3057\u3066QR\u30b3\u30fc\u30c9\u3092\u8aad\u307f\u53d6\u308aURL\u3092\u8fd4\u3059\u65b9\u6cd5"},"content":{"rendered":"<p>JavaScript\u306ejsQR\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u7c21\u5358\u306bWeb\u30da\u30fc\u30b8\u7248QR\u30b3\u30fc\u30c9\u30ea\u30fc\u30c0\u30fc\u3092\u4f5c\u308c\u308b\u3089\u3057\u3044\u3002\u5177\u4f53\u7684\u306b\u306fPC\u306eWeb\u30ab\u30e1\u30e9\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u30ab\u30e1\u30e9\u3067QR\u30b3\u30fc\u30c9\u3092\u8aad\u307f\u53d6\u308a\u3001URL\u3092\u8fd4\u3057\u3066\u304f\u308c\u308b\u3068\u3044\u3046\u3082\u306e\u3002\u304a\u3082\u3057\u308d\u305d\u3046\u3060\u3063\u305f\u306e\u3067\u4ee5\u4e0b\u306b\u5b9f\u88c5\u65b9\u6cd5\u3068\u30b5\u30f3\u30d7\u30eb\u3092\u30e1\u30e2\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>jsQR<\/h2>\n<h3>\u516c\u5f0f\u30b5\u30a4\u30c8<\/h3>\n<p><a href=\"https:\/\/github.com\/cozmo\/jsQR\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/cozmo\/jsQR<\/a><\/p>\n<h3>CDN<\/h3>\n<p>CDN\u3067\u4f7f\u3046\u5834\u5408\u306f\u4ee5\u4e0b\u3092\u8a18\u8ff0\u3059\u308b\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;script src=\" https:\/\/cdn.jsdelivr.net\/npm\/jsqr@1.4.0\/dist\/jsQR.min.js \"&gt;&lt;\/script&gt;<\/pre>\n<p>\u7570\u306a\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u304b\u3089\u63a2\u3059\u3002<\/p>\n<p><a href=\"https:\/\/www.jsdelivr.com\/package\/npm\/jsqr\" target=\"_blank\" rel=\"noopener\">https:\/\/www.jsdelivr.com\/package\/npm\/jsqr<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>\u30b5\u30f3\u30d7\u30eb<\/h2>\n<p><a href=\"https:\/\/taitan916.info\/sample\/jsQR\/\" target=\"_blank\" rel=\"noopener\">https:\/\/taitan916.info\/sample\/jsQR\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;html lang=\"ja\"&gt;\r\n&lt;head&gt;\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=UTF-8\"&gt;\r\n&lt;title&gt;jsQR\u306e\u30c6\u30b9\u30c8&lt;\/title&gt;\r\n&lt;meta name=\"viewport\" content=\u201dwidth=device-width,initial-scale=1\u2033&gt;\r\n&lt;style&gt;\r\nbody {\r\n    color: #333;\r\n    max-width: 640px;\r\n    margin: 0 auto;\r\n    position: relative;\r\n}\r\n#loadingMessage {\r\n    text-align: center;\r\n    padding: 40px;\r\n    background-color: #eee;\r\n}\r\n#canvas {\r\n    width: 100%;\r\n}\r\n#output {\r\n    margin-top: 20px;\r\n    background: #eee;\r\n    padding: 10px;\r\n    padding-bottom: 0;\r\n}\r\n#output div {\r\n    padding-bottom: 10px;\r\n    word-wrap: break-word;\r\n}\r\n#noQRFound {\r\n    text-align: center;\r\n}\r\n&lt;\/style&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;div id=\"loadingMessage\"&gt;\r\n        \u30d3\u30c7\u30aa\u30b9\u30c8\u30ea\u30fc\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093(Web\u30ab\u30e1\u30e9\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044)\r\n    &lt;\/div&gt;\r\n    &lt;canvas id=\"canvas\" hidden&gt;&lt;\/canvas&gt;\r\n    &lt;div id=\"output\" hidden&gt;\r\n        &lt;div id=\"outputMessage\"&gt;QR\u30b3\u30fc\u30c9\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f&lt;\/div&gt;\r\n        &lt;div hidden&gt;&lt;b&gt;Data:&lt;\/b&gt; &lt;span id=\"outputData\"&gt;&lt;\/span&gt;&lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n    &lt;script src=\" https:\/\/cdn.jsdelivr.net\/npm\/jsqr@1.4.0\/dist\/jsQR.min.js \"&gt;&lt;\/script&gt;\r\n    &lt;script&gt;\r\n        var video = document.createElement(\"video\");\r\n        var canvasElement = document.getElementById(\"canvas\");\r\n        var canvas = canvasElement.getContext(\"2d\");\r\n        var loadingMessage = document.getElementById(\"loadingMessage\");\r\n        var outputContainer = document.getElementById(\"output\");\r\n        var outputMessage = document.getElementById(\"outputMessage\");\r\n        var outputData = document.getElementById(\"outputData\");\r\n\r\n        function drawLine(begin, end, color) {\r\n            canvas.beginPath();\r\n            canvas.moveTo(begin.x, begin.y);\r\n            canvas.lineTo(end.x, end.y);\r\n            canvas.lineWidth = 4;\r\n            canvas.strokeStyle = color;\r\n            canvas.stroke();\r\n        }\r\n\r\n        navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } }).then(function(stream) {\r\n            video.srcObject = stream;\r\n            video.setAttribute(\"playsinline\", true);\r\n            video.play();\r\n            requestAnimationFrame(tick);\r\n        });\r\n\r\n        function tick() {\r\n            loadingMessage.innerText = \"Loading video...\"\r\n            if (video.readyState === video.HAVE_ENOUGH_DATA) {\r\n                loadingMessage.hidden = true;\r\n                canvasElement.hidden = false;\r\n                outputContainer.hidden = false;\r\n\r\n                canvasElement.height = video.videoHeight;\r\n                canvasElement.width = video.videoWidth;\r\n                canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height);\r\n                var imageData = canvas.getImageData(0, 0, canvasElement.width, canvasElement.height);\r\n                var code = jsQR(imageData.data, imageData.width, imageData.height, {\r\n                    inversionAttempts: \"dontInvert\",\r\n                });\r\n                if (code) {\r\n                    drawLine(code.location.topLeftCorner, code.location.topRightCorner, \"#FF3B58\");\r\n                    drawLine(code.location.topRightCorner, code.location.bottomRightCorner, \"#FF3B58\");\r\n                    drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, \"#FF3B58\");\r\n                    drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, \"#FF3B58\");\r\n                    outputMessage.hidden = true;\r\n                    outputData.parentElement.hidden = false;\r\n                    outputData.innerText = code.data;\r\n                } else {\r\n                    outputMessage.hidden = false;\r\n                    outputData.parentElement.hidden = true;\r\n                }\r\n            }\r\n            requestAnimationFrame(tick);\r\n        }\r\n    &lt;\/script&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f<a href=\"https:\/\/cozmo.github.io\/jsQR\/\" target=\"_blank\" rel=\"noopener\">\u30c7\u30e2\u30b5\u30a4\u30c8<\/a>\u306e\u3082\u306e\u3092\u307b\u307c\u6d41\u7528\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u8003\u3048\u3089\u308c\u308b\u4f7f\u3044\u3069\u3053\u308d<\/h2>\n<p>\u30b9\u30de\u30db\u3067QR\u30b3\u30fc\u30c9\u3092\u8aad\u307f\u8fbc\u307e\u305b\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u958b\u3044\u305f\u308a\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3057\u305f\u308a\u3068\u3044\u3046\u306e\u306f\u901a\u5e38\u306e\u30a2\u30d7\u30ea\u306e\u65b9\u304c\u826f\u3044\u306e\u3067\u3001\u305d\u308c\u4ee5\u5916\u306e\u90e8\u5206\u3067\u4f7f\u3046\u3053\u3068\u306b\u306a\u308b\u3002<\/p>\n<p>\u5177\u4f53\u7684\u306b\u306fURL\u3092\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u8fbc\u3080\u3068\u304b\u3002\u4f8b\u3048\u3070\u66f8\u7c4d\u3068\u304b\u30c1\u30e9\u30b7\u3068\u304b\u3067\u305f\u307e\u306bQR\u30b3\u30fc\u30c9\u304c\u8f09\u3063\u3066\u304a\u308a\u300c\u3067\u304d\u308c\u3070PC\u3067\u95b2\u89a7\u3057\u305f\u3044\u3093\u3060\u3051\u3069\u2026\u2026\u300d\u3068\u3044\u3063\u305f\u6642\u306b\u901a\u5e38\u306e\u30a2\u30d7\u30ea\u3060\u3068\u300c\u8aad\u307f\u53d6\u308a\u2192\u4f55\u3089\u304b\u306e\u65b9\u6cd5\u3067URL\u3092PC\u306b\u9001\u4fe1\u2192PC\u5074\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u958b\u304f\u300d\u3068\u306a\u308b\u304c\u3001\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u81ea\u52d5\u3067\u66f8\u304d\u8fbc\u3093\u3060\u5834\u5408\u300c\u4f55\u3089\u304b\u306e\u65b9\u6cd5\u3067PC\u306b\u9001\u4fe1\u300d\u90e8\u5206\u304c\u4e0d\u8981\u306b\u306a\u308b\u3002<\/p>\n<p>\u7121\u7406\u3084\u308a\u3072\u306d\u308a\u51fa\u3057\u305f\u611f\u304c\u3042\u308a\u5b9f\u7528\u6027\u306b\u306f\u304b\u3051\u305d\u3046\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u6240\u611f<\/h2>\n<p>JavaScript\u3067QR\u30b3\u30fc\u30c9\u3092\u8aad\u307f\u53d6\u308c\u308b\u3001\u3068\u3044\u3046\u306e\u306f\u9762\u767d\u3044\u3093\u3060\u3051\u3069\u3001QR\u30b3\u30fc\u30c9\u306f\u901a\u5e38\u306e\u30b9\u30de\u30db\u30a2\u30d7\u30ea\u3067\u3042\u308b\u7a0b\u5ea6\u554f\u984c\u7121\u3044\u305f\u3081\u4f7f\u3044\u3069\u3053\u308d\u304c\u96e3\u3057\u304f\u611f\u3058\u305f\u3002<\/p>\n<p>\u5c1a\u3001<a href=\"https:\/\/serratus.github.io\/quaggaJS\/#gettingstarted\" target=\"_blank\" rel=\"noopener\">QuaggaJS<\/a>\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3060\u3068\u901a\u5e38\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u304c\u8aad\u307f\u8fbc\u3081\u308b\u3089\u3057\u304f\u3001\u3053\u3061\u3089\u306a\u3089\u3082\u3046\u3061\u3087\u3063\u3068\u4f7f\u3044\u3069\u3053\u308d\u304c\u3042\u308a\u305d\u3046\u3002\u305d\u306e\u5185\u8a66\u3057\u3066\u307f\u305f\u3044\u3068\u3053\u308d\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript\u306ejsQR\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u7c21\u5358\u306bWeb\u30da\u30fc\u30b8\u7248QR\u30b3\u30fc\u30c9\u30ea ... <\/p>\n","protected":false},"author":1,"featured_media":1067,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[100,104],"class_list":["post-4658","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-library","tag-qrcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/4658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/comments?post=4658"}],"version-history":[{"count":2,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/4658\/revisions"}],"predecessor-version":[{"id":4661,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/4658\/revisions\/4661"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/media\/1067"}],"wp:attachment":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/media?parent=4658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/categories?post=4658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/tags?post=4658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}