About QR Code Reader
Decoding tries both polarities, so a code screenshotted from a dark-mode app reads as reliably as a printed one, and the located code is outlined on the image so a busy photo shows exactly what was read. Links are displayed with their destination named first rather than opened, because reading a code and trusting it are different steps.
A phone camera scans the code in front of you; this reads the codes you already have as pixels. That turns out to be a different job with different inputs: the QR someone sent in a chat, a screenshot of a boarding pass, a photo of a poster taken weeks ago, a code embedded in a PDF flyer, or one displayed on the very screen you are sitting at — where pointing a camera at your own monitor produces glare and moiré, and a screenshot pasted straight in produces a clean scan.
Under the hood a QR code is found before it is read. The three large squares are finder patterns that give the decoder position and orientation, the alternating timing lines establish the module grid, and Reed-Solomon error correction reconstructs data from a code that is partially dirty, damaged or obscured. This is why a code with a logo stamped over its centre still decodes — and why one with its quiet zone cropped off often does not: the decoder loses the boundary before error correction ever gets a chance.
The safety property is the reason to decode rather than scan-and-open. A QR code is nothing but a string, that string can point anywhere, and stickers pasted over legitimate codes on parking meters and restaurant menus are a documented scam precisely because cameras open links so eagerly. Reading the code as text first — with the destination domain shown before anything is visited, and the option to hand a suspicious link onward for closer inspection — is the difference between deciding and hoping.