qr

QR Code Generator — Create Custom QR Codes Free
QR Code Generator

Choose QR Code Type

Enter Content

QR Code Customization

No logo selectedUpload a PNG, JPG or SVG
Logo Size20%
QR Code Size
px

Live Preview

High Quality Scan to test your QR code
💡 Tip: You can scan the QR code to test. Always test before downloading.
⚙️
100% FreeNo hidden charges
🚫
No WatermarkClean QR codes
🖨️
High ResolutionPrint ready quality
Unlimited ScansNo scan limit
🔒
Privacy FocusedWe respect privacy
🛡️
SecureYour data is safe
Advanced EngineReal-time rendering
`); w.document.close(); setTimeout(()=>{ w.focus(); w.print(); }, 300); }); document.getElementById('testScanBtn').addEventListener('click',()=>{ if(typeof jsQR === 'undefined'){ showToast('Scan verifier failed to load — check your connection'); return; } const imgData = ctx.getImageData(0,0,canvas.width,canvas.height); const result = jsQR(imgData.data, canvas.width, canvas.height); if(result && result.data){ showToast('✓ Scan verified — decodes correctly'); } else { showToast('Could not verify — try increasing error correction or reducing logo size'); } }); /* ===================== THEME TOGGLE ===================== */ document.getElementById('themeToggle').addEventListener('click',()=>{ const html=document.documentElement; const cur = html.getAttribute('data-theme'); html.setAttribute('data-theme', cur==='dark' ? 'light' : 'dark'); }); document.getElementById('loginBtn').addEventListener('click',()=> showToast('Demo build — accounts are not enabled')); /* ===================== NAV / PAGE ROUTING ===================== */ const pages = ['generator','scan','pricing','api','blog','contact']; document.querySelectorAll('.mainnav a').forEach(a=>{ a.addEventListener('click',e=>{ e.preventDefault(); const p = a.dataset.page; document.querySelectorAll('.mainnav a').forEach(x=>x.classList.remove('active')); a.classList.add('active'); pages.forEach(pg=> document.getElementById('page-'+pg).classList.toggle('hidden', pg!==p)); if(p==='scan') initScanPageIfNeeded(); }); }); /* ===================== SCAN PAGE ===================== */ let camStream=null; function initScanPageIfNeeded(){} document.getElementById('startCam').addEventListener('click', async ()=>{ const video = document.getElementById('video'); try{ camStream = await navigator.mediaDevices.getUserMedia({video:{facingMode:'environment'}}); video.srcObject = camStream; scanLoop(); }catch(e){ showToast('Camera not available: '+e.message); } }); function scanLoop(){ const video=document.getElementById('video'); const c=document.getElementById('scanCanvas'); const cx=c.getContext('2d'); function tick(){ if(video.readyState===video.HAVE_ENOUGH_DATA){ c.width=video.videoWidth; c.height=video.videoHeight; cx.drawImage(video,0,0,c.width,c.height); const imgData=cx.getImageData(0,0,c.width,c.height); const code=jsQR(imgData.data,c.width,c.height); if(code){ showScanResult(code.data); if(camStream){ camStream.getTracks().forEach(t=>t.stop()); camStream=null; } return; } } if(camStream) requestAnimationFrame(tick); } requestAnimationFrame(tick); } document.getElementById('scanFile').addEventListener('change', e=>{ const file=e.target.files[0]; if(!file) return; const img=new Image(); img.onload=()=>{ const c=document.getElementById('scanCanvas'); const cx=c.getContext('2d'); c.width=img.naturalWidth; c.height=img.naturalHeight; cx.drawImage(img,0,0); const imgData=cx.getImageData(0,0,c.width,c.height); const code=jsQR(imgData.data,c.width,c.height); if(code) showScanResult(code.data); else showToast('No QR code detected in image'); }; img.src=URL.createObjectURL(file); }); function showScanResult(text){ const r=document.getElementById('scanResult'); r.classList.remove('hidden'); r.innerHTML = `Decoded content:
${text.replace(/
Scroll to Top