bacon/bacon-qr-code
PHP QR code generator (ZXing encoder port) with multiple renderers/back ends: Imagick, SVG, EPS, and a separate GDLib renderer. Generate QR codes to files or output with customizable size/style via Renderer and Writer APIs.
BaconQrCode is a port of QR code portion of the ZXing library. It currently only features the encoder part, but could later receive the decoder part as well.
As the Reed Solomon codec implementation of the ZXing library performs quite slow in PHP, it was exchanged with the implementation by Phil Karn.
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\Image\ImagickImageBackEnd;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Writer;
$renderer = new ImageRenderer(
new RendererStyle(400),
new ImagickImageBackEnd()
);
$writer = new Writer($renderer);
$writer->writeFile('Hello World!', 'qrcode.png');
BaconQrCode comes with multiple back ends for rendering images. Currently included are the following:
ImagickImageBackEnd: renders raster images using the Imagick librarySvgImageBackEnd: renders SVG files using XMLWriterEpsImageBackEnd: renders EPS filesGD library has so many limitations, that GD support is not added as backend, but as separated renderer.
Use GDLibRenderer instead of ImageRenderer. These are the limitations:
Example usage:
use BaconQrCode\Renderer\GDLibRenderer;
use BaconQrCode\Writer;
$renderer = new GDLibRenderer(400);
$writer = new Writer($renderer);
$writer->writeFile('Hello World!', 'qrcode.png');
When using ImagickImageBackEnd, single white pixels may appear inside filled regions. This is
most visible with margin 0 (where artifacts appear at the image edge), but can in theory occur at
any position. The cause is a bug in ImageMagick's path fill rasterizer (GetFillAlpha in
MagickCore/draw.c): an off-by-one error in the winding number calculation combined with an edge
skipping bug in the scanline processing can incorrectly classify pixels as outside the polygon.
The bug cannot be reliably worked around in this library:
For artifact-free output, use SvgImageBackEnd or GDLibRenderer instead.
To run unit tests, you need to have Node.js and the pixelmatch library installed. Running
npm install will install this for you.
How can I help you explore Laravel packages today?