If you’ve ever seen a QR code with a logo or icon in the middle and wondered how it still scans, the answer is more interesting than you might expect. I assumed for a long time that the generator was doing something clever, maybe shifting bits away from the center so the logo didn’t cover anything important. That’s not what happens.
It’s All About Error Correction
QR codes were built to survive damage. A code on a shipping label might get scuffed or wet and still needs to scan. To handle that, every QR code includes redundant data using Reed-Solomon error correction. There are four levels:
- L (Low): up to 7% of data can be restored
- M (Medium): up to 15% of data can be restored
- Q (Quartile): up to 25% of data can be restored
- H (High): up to 30% of data can be restored
When a logo sits in the center of a QR code, the reader treats the covered pixels the same way it treats physical damage. The error correction reconstructs the missing data on the fly. Nothing gets moved or avoided. Simple QR Code Maker uses the H (High) level when a logo is present, which gives the maximum 30% recovery capacity.
Frame QR? Never Heard Of It.

There’s a spec called Frame QR that takes a different approach: it arranges encoded data around a central empty region, essentially building the hole for artwork directly into the code structure. It sounds like the cleaner solution, but Frame QR is a completely separate variant from standard QR codes and has nothing to do with error correction. The bigger practical problem is that iPhone and Android QR readers simply can’t scan Frame QR codes. Standard QR codes with error correction are the reliable choice.
Why There’s No Recommended Logo Size
You might notice that Simple QR Code Maker doesn’t tell you how large your logo can safely be or your QR Code with a logo. That’s intentional, and not just because I didn’t get around to it.
The logo physically overlaps QR code data, and the reader uses error correction to recover what’s hidden. There’s no clean size limit we could surface, because the recoverable area depends on the QR version, the length of the encoded content, and which specific pixels your logo happens to cover. A logo that scans fine at one content length might push past the correction capacity at another.
The practical approach is to generate the code, test it with a couple of different devices in the real world, and adjust the logo size if needed. If it scans consistently, you’re good.
Thanks for the deep dive into the weird world of images on QR Codes 🙂
Joe
