A QR code is just data in a grid — the magic is entirely in the convention a scanner follows once it reads the text. Knowing those conventions explains why a Wi-Fi code works on one phone and not another, why a logo can be perfectly safe or quietly fatal, and why printing a dark-blue code on a grey background is a gamble rather than a design choice.
What actually fits inside one
A QR code holds up to 2 953 bytes. That is roughly 4 000 Latin characters, 1 800 characters of Cyrillic, or 1 200 of Japanese — and the practical capacity is smaller as soon as you raise the error-correction level. What you put in it is plain text, so anything a phone can recognise as a convention goes: a URL, a Wi-Fi credential string, a vCard, an iCalendar event, a phone number, a geo coordinate pair, a payment request.
| Type | What the scan does | Payload starts with |
|---|---|---|
| Link | Opens the browser on the URL | https:// or http:// |
| Plain text | Shows the text, no action | — |
| Wi-Fi | Offers to join the network | WIFI: |
| Contact | Saves or opens a contact card | BEGIN:VCARD |
| Event | Adds a calendar entry | BEGIN:VEVENT |
| Phone / SMS | Starts a call or a message | tel: / SMSTO: |
| Location | Opens the coordinates on a map | geo: |
| Opens a chat with that number | https://wa.me/ |
The QR Code Generator builds all of these, showing only the fields each type needs and escaping the characters that would otherwise break the payload.
Escaping is where hand-built codes fail
Wi-Fi strings use semicolons and colons as field separators, so a network called "Cafe;Free" has to be written as Cafe\;Free — otherwise the scanner reads the name as two fields and the join fails. The same idea applies to vCard (semicolons, commas) and iCalendar (semicolons, commas, newlines). If you build these payloads by hand from a template, the escaping is the part that bites.
Error correction, quiet zones and density
Error-correction level is the redundancy baked into the code: L recovers about 7% damage, M about 15%, Q about 25% and H about 30%. Higher levels mean a denser code for the same content. M is the sensible default; H is what you want when the code will be printed small, placed on a curved surface, or covered by a logo.
- Keep the quiet zone: at least four modules of empty space on every side, or scanners lose the edge of the symbol.
- Prefer dark modules on a light background. Inverted codes work with some scanners and fail with others.
- Give the code contrast — a mid-tone foreground on a mid-tone background fails the same way grey text on grey paper does.
- Do not print below roughly 2 cm × 2 cm per version-1 symbol; denser codes need more room to be readable.
Contrast is measurable, not a matter of taste: the Contrast Checker gives you the WCAG ratio between your two colours, and it is worth knowing that phones are much fussier about low-contrast codes than a colourful design mock-up suggests.
Logos, colours and shapes without breaking the code
Styled codes are fine — the format tolerates it — as long as the damage stays inside the redundancy you paid for and you keep the three corner finder patterns intact. Practical rules: keep a centre logo to about 20–25% of the code width, use error correction H whenever you add one, and leave the eye patterns recognisable even if you recolour or round them.
Scanning: what the reader needs from you
Reading a code needs a clear frame and a moment of stillness; steep angles, glare and motion blur are the usual reasons a scan takes a few seconds. In a browser, QR Code Scanner can use the camera where the browser exposes it, and falls back to scanning a photo or screenshot when it does not — both paths decode on your device, so nothing you scan is uploaded or logged.
PNG or SVG?
- PNG for chat, documents, slides and anything that will be viewed on a screen.
- SVG for print, signage and merchandise — it scales to any size without blurring.
- Never re-compress a JPEG QR code: soft module edges are the fastest way to make a working code unreliable.
One more thing: no redirect layer
Some generators hand you a short link they control, which lets them count scans — and lets them break your code later. A code that encodes the destination directly has no such dependency: whoever scans it reaches exactly what you typed, forever. Pixitools codes work that way: the payload you see is the payload that is printed. The Base64 encoder and the Metadata Viewer work on the same principle — local, inspectable, no server in the middle.
Try it with these tools
Related articles
Guides
How to Merge, Split and Rearrange PDFs Without Uploading Them
Everyday PDF page surgery — combining sources, splitting by range, deleting, extracting and reordering pages, watermarking and numbering — done in your browser instead of on someone else's server.
Read articlePrivacy
How Image Privacy Works in Browser-Based Image Tools
What actually happens when an image tool claims to run 'in your browser' — and how to verify that your files never leave your device.
Read articleEvery tool mentioned in this article runs entirely in your browser — see privacy for what that means.