bacon/bacon-qr-code
BaconQrCode is a PHP QR code generator (ZXing encoder port) with fast Reed-Solomon. Render to PNG via Imagick, or output SVG and EPS; includes a separate GDLibRenderer. Simple API to write files or generate images from text.
QrCodeServiceProvider) to centralize QR generation logic.QrCode) for intuitive syntax (e.g., QrCode::generate('text')->toImage()).Writer or Renderer interfaces into controllers/services for testability and flexibility.Imagick, SVG, EPS, GDLib), enabling customization for different use cases (e.g., SVG for vector graphics, GDLib for lightweight deployments).Storage facade to save QR codes to disk (e.g., storage_path('app/qrcodes')).Response::make(file_get_contents($path), 200, ['Content-Type' => 'image/png'])).GenerateQrCodeJob) for async processing in high-traffic scenarios.spatie/laravel-medialibrary for file storage).ext-imagick (for ImagickImageBackEnd) or ext-gd (for GDLibRenderer). Laravel deployments (e.g., Forge, Vapor) can easily enable these.ext-xmlwriter (for SvgImageBackEnd). Fallback to GDLibRenderer if unavailable.@qr directive for inline generation (e.g., @qr('text')->toSvg()).qr:generate command for bulk generation (e.g., php artisan qr:generate --text="Hello" --output=qrcode.png).qr-{{user_id}}.png).endroid/qr-code if needed.ImagickImageBackEnd may have higher memory usage than GDLibRenderer. Profile in production to avoid timeouts.SvgImageBackEnd or GDLibRenderer in production (configurable via Laravel’s config/qr.php).GDLibRenderer (document this in API contracts).Imagick features) and abstract behind interfaces for easy swaps.ImagickImageBackEnd or SvgImageBackEnd is preferred.ext-imagick/ext-gd available in all environments (e.g., shared hosting)? If not, prioritize GDLibRenderer or document requirements.GenerateQrCodeJob).composer.json if stability is critical.BaconQrCode\Writer) to concrete implementations.
// app/Providers/QrCodeServiceProvider.php
public function register()
{
$this->app->singleton(Writer::class, function ($app) {
$renderer = new ImageRenderer(
new RendererStyle(400),
new ImagickImageBackEnd()
);
return new Writer($renderer);
});
}
// app/Facades/QrCode.php
public static function generate(string $text): Writer
{
return app(Writer::class)->writeString($text);
}
Usage: QrCode::generate('text')->writeFile('path.png').config/qr.php) to centralize settings (e.g., default renderer, sizes, storage paths).Storage facade to save QR codes to disk or cloud storage (e.g., S3).
use Illuminate\Support\Facades\Storage;
$path = Storage::disk('public')->put('qrcodes/qr-' . Str::uuid() . '.png', file_get_contents($tempPath));
qr_codes table with metadata (e.g., user_id, expires_at).return response()->streamDownload($path, 'qr-code.png');
<img src="{{ asset('storage/qrcodes/' . $qrCode->path) }}" alt="QR Code">
GDLibRenderer in environments without Imagick to ensure graceful degradation.endroid/qr-code), maintain both during a transition period, then deprecate the old one via Laravel’s deprecated() helper.ext-imagick or ext-gd is installed. Document this in README.md and deployment scripts.ext-xmlwriter for SVG support (fallback to GDLibRenderer if missing).spatie/laravel-medialibrary). Run composer validate post-integration.composer require bacon/bacon-qr-code.How can I help you explore Laravel packages today?