{"id":210,"date":"2026-03-30T14:10:06","date_gmt":"2026-03-30T14:10:06","guid":{"rendered":"https:\/\/dabudi.si\/?page_id=210"},"modified":"2026-03-30T14:10:07","modified_gmt":"2026-03-30T14:10:07","slug":"cukido-scanner","status":"publish","type":"page","link":"https:\/\/dabudi.si\/index.php\/cukido-scanner\/","title":{"rendered":"\u010dukido scanner"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"sl\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n<title>\u010cukido skener<\/title>\n\n<style>\nbody {\n  font-family: Arial, sans-serif;\n  background: linear-gradient(135deg,#4facfe,#00f2fe);\n  display:flex;\n  justify-content:center;\n  align-items:center;\n  min-height:100vh;\n  margin:0;\n}\n\n#app-wrapper {\n  background:white;\n  padding:25px;\n  max-width:400px;\n  width:90%;\n  border-radius:15px;\n  box-shadow:0 10px 25px rgba(0,0,0,0.2);\n  text-align:center;\n}\n\nbutton {\n  padding:10px 15px;\n  border:none;\n  border-radius:8px;\n  background:#2196f3;\n  color:white;\n  font-weight:bold;\n  cursor:pointer;\n  margin:5px;\n}\n\nbutton:hover {\n  background:#1976d2;\n}\n\nvideo {\n  width:100%;\n  border-radius:10px;\n  margin-top:10px;\n}\n\n#result {\n  margin-top:10px;\n  font-weight:bold;\n}\n\n#pattern {\n  font-size:12px;\n  color:#555;\n  word-wrap:break-word;\n}\n\n@media (max-width:500px){\n  #app-wrapper { width:95%; }\n}\n<\/style>\n<\/head>\n\n<body>\n\n<div id=\"app-wrapper\">\n  <h2>\ud83d\udcf7 \u010cukido skener<\/h2>\n\n  <button onclick=\"startCamera()\">Vklopi kamero<\/button>\n  <button onclick=\"scan()\">Slikaj kodo<\/button>\n\n  <video id=\"video\" autoplay playsinline><\/video>\n  <canvas id=\"canvas\" width=\"300\" height=\"200\" style=\"display:none;\"><\/canvas>\n\n  <p id=\"result\"><\/p>\n  <p id=\"pattern\"><\/p>\n<\/div>\n\n<script>\nlet video = document.getElementById(\"video\");\nlet canvas = document.getElementById(\"canvas\");\nlet ctx = canvas.getContext(\"2d\");\n\n\/\/ \ud83d\udc49 TU nastavi\u0161 pravo kodo (po prvem skenu!)\nlet REFERENCE_PATTERN = [1,2,1,1,2,2,1];\n\nfunction startCamera(){\n  navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } })\n    .then(stream => video.srcObject = stream)\n    .catch(() => alert(\"Kamera ne dela\"));\n}\n\nfunction scan(){\n  ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n  let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n  let pattern = processImage(imageData);\n\n  document.getElementById(\"pattern\").innerHTML =\n    \"Zaznan vzorec: \" + JSON.stringify(pattern);\n\n  if(pattern.length === 0){\n    document.getElementById(\"result\").innerHTML = \"\u26a0\ufe0f Ni zaznane kode\";\n    return;\n  }\n\n  if(isSimilar(pattern, REFERENCE_PATTERN)){\n    document.getElementById(\"result\").innerHTML = \"\u2705 PRAVA KODA\";\n  } else {\n    document.getElementById(\"result\").innerHTML = \"\u274c NEPRAVA KODA\";\n  }\n}\n\n\/\/ \ud83d\udd0d analiza slike\nfunction processImage(imageData){\n  let data = imageData.data;\n  let width = imageData.width;\n  let height = imageData.height;\n\n  let colSum = new Array(width).fill(0);\n\n  for(let x = 0; x < width; x++){\n    for(let y = 0; y < height; y++){\n      let i = (y * width + x) * 4;\n      let gray = (data[i] + data[i+1] + data[i+2]) \/ 3;\n\n      if(gray < 110){\n        colSum[x]++;\n      }\n    }\n  }\n\n  let bars = [];\n  let current = 0;\n\n  for(let val of colSum){\n    if(val > height * 0.15){\n      current++;\n    } else {\n      if(current > 2){\n        bars.push(current);\n      }\n      current = 0;\n    }\n  }\n\n  if(current > 2) bars.push(current);\n\n  if(bars.length === 0) return [];\n\n  let avg = bars.reduce((a,b)=>a+b,0) \/ bars.length;\n\n  return bars.map(b => b < avg ? 1 : 2);\n}\n\n\/\/ \ud83e\udde0 pametna toleranca\nfunction isSimilar(a, b){\n  if(a.length !== b.length) return false;\n\n  let score = 0;\n\n  for(let i=0;i<a.length;i++){\n    if(a[i] === b[i]){\n      score += 2;\n    } else if(Math.abs(a[i] - b[i]) === 1){\n      score += 1;\n    }\n  }\n\n  let maxScore = b.length * 2;\n  let percent = score \/ maxScore;\n\n  return percent > 0.8; \/\/ \ud83d\udc48 toleranca 80%\n}\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u010cukido skener \ud83d\udcf7 \u010cukido skener Vklopi kamero Slikaj kodo<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-210","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/pages\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":1,"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/pages\/210\/revisions"}],"predecessor-version":[{"id":211,"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/pages\/210\/revisions\/211"}],"wp:attachment":[{"href":"https:\/\/dabudi.si\/index.php\/wp-json\/wp\/v2\/media?parent=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}