Optimalizace QR kódů

QR kódy existují v hodně různých velikostech, co do počtu bodů. Při dobrém návrhu ukládaných dat je možné dosáhnout menšího kódu a tím i zjednodušení.

Optimalizace QR kódů

Tento článek patří do seriálu Vše okolo čárových a QR kódů. Ostatní články seriálu:


Existuje celkem 40 velikostí QR kódů. Nejmenší možná velikost je 21x21 modulů a každá další varianta je o 4 moduly do obou směrů větší. Největší QR kód tedy bude složen ze 177x177 modulů. Takový se mi ale už nepodařilo čtečkou přečíst.

Každá velikost může logicky pojmout pouze určité množství dat. Jak ale je zmíněno v článku o generátorech, existují ještě 4 úrovně obnovy chyb - ECC. A navíc data jsou do QR kódu kódována podle typu dat. Takže nejmenší QR kód pojme jiné množství číslic než znaků. A čím vyšší je ECC level, tím i tyto počty klesají.

Varianty znakové sady

Generátory samy určují typ kódování, který se použije. Varianta 1 je číselná, obsahuje tedy pouze znaky 0-9 a těchto se do každé velikosti vleze nejvíce. Varianta 2 je alfanumerická, povolené znaky jsou ale pouze velká písmena A-Z, číslice 0-9 a pár speciální symbolů $%*+-./: a mezera. Bohužel zde chybí například čárka.

Varianta 3 je binární, zde se kóduje vše ostatní, včetně textu s malými písmeny nebo jinými znaky. Existuje ještě varianta 4 a to Japonské znaky Kandži, které mají své speciální kódování a nekódují se pomocí binárního zápisu.

Možnosti dat QR kódů ve velikostech 1-10

Jak na nejmenší QR kód

Z předchozího textu je jasné, že pokud se do QR kódu budou ukládat pouze číslice, vejde se jich tam nejvíce. Pokud je potřeba přidat i text, hodí se jej vložit velkými písmeny, protože malá písmena již musejí být kódována jako binární data. Z toho důvodu je i většina "protokolů" v QR kódech velkými písmeny, viz díl Možnosti dat v QR.

Kolik se při každé velikosti a v každé úrovni obnovy chyb vleze do QR kódu dat je znázorněno v obrázku výše. Kompletní tabulka je na stránkách qrcode.com.

Pozor na kódování UTF-8 a další

Výchozí kódování textu v binární variantě QR kódů je ISO-8859-1, které bohužel neumí všechny české znaky. Text může být kódován i dalšími téměř 30 různými druhy kódování. Jaké je vybrané, kromě základního, ale musí být v QR kódu také zaznamenáno, což přidává trochu další režie a snižuje kapacitu.

Například text ěščřžýáí v UTF-8 zabírá 16 bytů. Přesto nestačí QR kód o velikosti 21x21 modulů a ECC levelem L, který pojme jinak 17 bytů. Něco je právě režie ohledně kódování.

Proč generovat malý kód?

V běžném případě se s tímto problémem asi příliš lidí nesetká. Pokud ale QR kód musí být rozměrově malý, je lepší, když je i s menším počtem modulů. Osobně jsem to začal řešit, když se měla vytvořit šablona pro sprejování QR kódu. To se každé zvětšení počítá.


Zkušenosti s QR kódy, či jejich minimalizací můžete sdílet v komentářích.

K tomuto článku již není možné přidávat další komentáře