bacon/bacon-qr-code
PHP QR code generator ported from ZXing (encoder only). Render to PNG via Imagick, or output SVG/EPS; includes a separate GDLib renderer. Simple Writer API to generate QR codes to files or strings.
Writer class abstracts backend logic, simplifying future swaps.ext-imagick, ext-gd, ext-xmlwriter for SVG/EPS). No known conflicts with Laravel’s core or popular packages (e.g., laravel/framework, spatie/laravel-medialibrary).writeFile()) and in-memory (getImage()) generation, fitting Laravel’s file system (via Storage facade) and response handling (e.g., Response::make()).ImagickImageBackEnd (mitigated by fallback to GDLibRenderer or SvgImageBackEnd for critical use cases).endroid/qr-code if throughput is critical.SvgImageBackEnd for advanced styling.ext-imagick or ext-gd for image output. SVG/EPS require ext-xmlwriter. Document these prerequisites in deployment.ext-imagick/ext-gd available in all environments (e.g., shared hosting)?BaconQrCode\Writer to an interface (e.g., QrCodeGenerator) for easy mocking/testing.QrCode facade to simplify usage (e.g., QrCode::generate('text')->toFile('path.png')).ShouldQueue jobs for long-running tasks (e.g., batch processing).Storage facade to handle file paths (e.g., storage_path('app/qrcodes/')).Response::make() with Content-Type: image/png (or image/svg+xml).use BaconQrCode\Writer;
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\Image\ImagickImageBackEnd;
public function generateQrCode()
{
$renderer = new ImageRenderer(new RendererStyle(400), new ImagickImageBackEnd());
$writer = new Writer($renderer);
return $writer->writeString('Hello Laravel', 'png');
}
QrCodeService class to encapsulate logic:
class QrCodeService {
public function __construct(private Writer $writer) {}
public function generate(string $text, string $format = 'png'): string
{
return $this->writer->writeString($text, $format);
}
}
$app->bind(QrCodeService::class, function ($app) {
return new QrCodeService(
new Writer(new ImageRenderer(new RendererStyle(400), new ImagickImageBackEnd()))
);
});
// app/Facades/QrCode.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class QrCode extends Facade { public static function getFacadeAccessor() { return 'qrcode'; } }
AppServiceProvider.try-catch to handle missing extensions:
try {
$qr = $service->generate($text);
} catch (\Exception $e) {
Log::error("QR generation failed: " . $e->getMessage());
abort(500, "Failed to generate QR code.");
}
bacon/bacon-qr-code for breaking changes (e.g., PHP 8.2+ features in v3.x).composer.json for stability (e.g., ^3.0).ext-imagick, ext-gd, ext-xmlwriter) in README/docs.QrCodeService methods).GDLibRenderer or SVG in documentation.debugbar to inspect memory/CPU usage during generation.Storage disk drivers (e.g., S3) for offloading file storage.| Failure Scenario | Impact | Mitigation |
|---|---|---|
Missing ext-imagick/ext-gd |
Broken QR generation | Fallback to queued generation or SVG. |
| Imagick white pixel artifacts | Visually incorrect QRs | Use `GDLib |
How can I help you explore Laravel packages today?