Import the main class(es) and include the autoloader (if necessary):
use chillerlan\QRCode\{QRCode, QROptions};
require_once __DIR__.'/../vendor/autoload.php';
We want to encode this URI for a mobile authenticator into a QRcode image:
$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net';
$qrcode = (new QRCode)->render($data);
printf('<img src="%s" alt="QR Code" />', $qrcode);
Configuration using QROptions:
$options = new QROptions;
$options->version = 7;
$options->imageBase64 = false; // output raw image instead of base64 data URI
header('Content-type: image/svg+xml'); // the image type is SVG by default
echo (new QRCode($options))->render($data);
See Advanced usage for a more in-depth usage guide. Also, have a look in the examples folder for some more usage examples.
Using the built-in QR Code reader is pretty straight-forward:
try{
$result = (new QRCode)->readFromFile('path/to/file.png'); // -> DecoderResult
}
catch(Throwable $exception){
// handle exception...
// throw ...
}
// you can now use the result instance...
$content = $result->data;
// ...or simply cast the result instance to string to get the content
$content = (string)$result;
It's generally a good idea to wrap the reading in a try/catch block to handle any errors that may occur in the process.
The QR encoder, especially the subroutines for mask pattern testing, can cause high CPU load on increased matrix size. You can avoid a part of this load by choosing a fast output module, like SVG. Oh hey and don't forget to sanitize any user input!