Geneátor QR kódů

Pavel Tipy & triky, PHP

Jak generovat QR kód v PHP, o tom bude dnešní článek. Ale nezůstane to jen u toho. Trochu QR kód bude také popsán s tím, co vše si lze u něj dovolit. Viz QR kód v obrázku článku.

Geneátor QR kódů

QR kódy jsou stále rozšířenější. Lze je vidět na budovách, na fakturách k placení, lístcích apod. Je to už nějaký ten pátek, co jsem psal článek o Generování čárových kódů, a tak je čas na generování také 2D kódů, konkrétně QR.

QR - Quick Response code

Ještě se vrátím zpět k čárovým kódům. Poprvé jsem je použil na poukazy na SkiBílá.cz, protože na pokladnách jsou čtečky na různé slevové karty. Také čtečky čárových kódů jsou určitě levnější než čtečky QR kódů. Pokud ale je použita mobilní aplikace jako čtečka, QR kódy dostávají navrch.

QR kódy a jejich výhody

QR je zkratka pro Quick Response, a čtení rychlé je. Je to dáno převážně jeho konstrukcí a použitými technikami. Zatímco čárové kódy se dají číst vzhůru nohama, QR kódy se dají číst ze všech 4 stran. Obsahují také kontrolní součty dat, takže i při poškození je lze stále přečíst. U QR kódu ani nezáleží na konkrétní barvě, či menším rozmazání. Převážně pomalu ostřící telefony dokáží kód přečíst dříve, než úplně zaostří.

Na následujícím obrázku jsou zobrazeny různé QR kódy s menším, či větším poškozením, které lze stále přečíst. Někdy přečtení trvá opravdu dlouho (viz kód na 2. řáddku, 1. sloupci), ale přečíst se povede. Jako čtečku používám aplikaci Barcode Scanner na Android.

Ukázky QR kódů a jejich deformace

Možnosti, že kód lze trochu poničit a stále funguje, se dá využít pro vytvoření pěknějšího kódu s vlastním logem, zaoblenými rohy apod. O QR kódu je na Wikipedii trochu podrobnější pěkný článek, případně se stačí přepnout do angličtiny.

Oprava chyb při čtení

Jak již bylo zmíněno, QR kódy obsahují kontrolní součty, díky kterým i při poničení kódu je lze v pořádku přečíst. Při generování lze ale nastavit, jak moc těchto kontrolních dat má obsahovat. Lze vybrat celkem ze 4 úrovní, kolik procent kódu může být ztraceno pro správné přečtení:

  • L - cca 7%
  • M - cca 15%
  • Q - cca 25%
  • H - cca 30%

Je důležité zmínit, že pokud bude chybět 1/3 kódu v kuse, nemusí se jej povést přečíst, chyby by měly být rozprostřeny rovnoměrně po celém ploše kódu. Na ukázce výše jsou kódy L a H s maximální velikostí chyby, kterou se mi povedlo vytvořit pro úspěšné přečtení. U L kódu je to rozhodně menší plocha.

Generování kódu

Pro generování kódu v PHP lze využít knihovnu BaconQrCode, kterou lze nainstalovat pomocí composeru:

composer require bacon/bacon-qr-code

Knihovna bohužel nemá dokumentaci. Naštěstí je ale psána velmi pěkně, takže co nenabízí v základu, lze velmi jednoduše přidat nebo upravit pomocí dědění. Následující ukázka ale bude stačit pro 90% případů. Ale lze také generovat například SVG nebo EPS formát, i přizpůsobit barvy. Je to ale nutné dohledat v kódu.

$renderer = new \BaconQrCode\Renderer\Image\Png();
$renderer->setHeight(360);
$renderer->setWidth(360);
$writer = new \BaconQrCode\Writer($renderer);
// Zapsání do souboru s defaultním kódováním (ISO-8859-1)
// a nejnižší obnovou chyb, tj level L
$writer->writeFile("http://www.kutac.cz/", "myQRcode.png");

// Získání binárních dat v defaultním kódování
// s nejvyšší obnovou chyb (cca 30%)
// Lze nastavit i jiná kódování, jako UTF-8, WINDOWS-1250 apod
$binData = $writer->writeString("http://www.kutac.cz/",
    \BaconQrCode\Encoder\Encoder::DEFAULT_BYTE_MODE_ECODING,
    \BaconQrCode\Common\ErrorCorrectionLevel::H);

Se zkušenostmi s QR kódy, nebo i jinými kódy, se můžete podělit v komentářích.

Přidat komentář

Právě odpovídáte na existující komentář. Zrušit

Komentáře

Novinky z blogu

Do Hyundai na interní prohlídku

Jak jsme zavítali do fabriky Hyundai Dymos v Nošovicích na jednu interní exkurzi. Absolvovali bezpečnostním školením, prošli si výrobní halu a také mohli zkusit vyrobit...

Další články