aferrandini/phpqrcode
PHP QR Code is a lightweight library to generate QR codes in pure PHP. Create PNG images from text, URLs, or other data with configurable error correction, size, and margins—ideal for adding QR generation to PHP apps without extra extensions.
Installation Add the package via Composer:
composer require aferrandini/phpqrcode
(Note: Due to the package being archived, ensure compatibility with your PHP version—tested up to PHP 7.x in legacy projects.)
First Usage Generate a basic QR code in a Laravel controller or blade view:
use Aferrandini\PHPQRCode\QRCode;
$qrCode = new QRCode();
$qrCode->render('https://example.com', 'qr.png');
(Outputs qr.png in the current directory.)
Quick Blade Integration In a Blade template:
<img src="{{ route('generate.qr', ['data' => 'Hello World']) }}" alt="QR Code">
(Requires a route and controller to handle dynamic generation.)
Route::get('/profile/{user}/qr', [QRController::class, 'generate'])->name('profile.qr');
public function generate(User $user)
{
$qrCode = new QRCode();
$qrCode->render(
route('profile.show', $user),
public_path("uploads/qr/{$user->id}.png")
);
return response()->file(public_path("uploads/qr/{$user->id}.png"));
}
storage/app/qr/ and use Laravel’s Storage facade for retrieval.Create a dedicated service class to encapsulate logic:
namespace App\Services;
use Aferrandini\PHPQRCode\QRCode;
class QRCodeService {
public function generate(string $data, string $path): void
{
$qrCode = new QRCode();
$qrCode->render($data, $path);
}
public function getUrl(string $path): string
{
return Storage::url($path);
}
}
Usage in Controller:
public function generateQR(Request $request)
{
$service = new QRCodeService();
$service->generate($request->data, "qr/{$request->id}.png");
return $service->getUrl("qr/{$request->id}.png");
}
Leverage the library’s built-in options:
$qrCode = new QRCode();
$qrCode->setSize(300); // Adjust size (default: 100px)
$qrCode->setMargin(5); // Margin around the code
$qrCode->setErrorCorrection('H'); // Error correction level (L/M/Q/H)
$qrCode->render($data, 'custom.png');
Generate multiple QR codes in bulk (e.g., for product barcodes):
public function generateBatch(array $dataArray, string $prefix = 'qr_')
{
foreach ($dataArray as $index => $data) {
$qrCode = new QRCode();
$qrCode->render($data, "batch/{$prefix}{$index}.png");
}
}
Use Laravel’s Storage facade for cloud storage (S3, etc.):
use Illuminate\Support\Facades\Storage;
$qrCode->render($data, 'qr.png');
Storage::disk('s3')->put('qr-codes/qr.png', file_get_contents('qr.png'));
Return QR codes as base64-encoded strings in JSON:
public function getQRCodeAsBase64(string $data)
{
ob_start();
$qrCode = new QRCode();
$qrCode->render($data);
$base64 = 'data:image/png;base64,' . base64_encode(ob_get_clean());
return response()->json(['qr_code' => $base64]);
}
ext-dom if errors arise.endroid/qr-code for active maintenance.storage/app/qr) is writable:
mkdir -p storage/app/qr
chmod -R 755 storage/app/qr
setSize(1000)) may hit PHP’s memory limit. Adjust memory_limit in php.ini or optimize image settings:
$qrCode->setSize(500); // Balance between quality and memory
$qrCode->render($data, __DIR__ . '/../../storage/app/qr/test.png');
$qrCode->render($data, "qr/{uniqid()}.png");
L): Use for simple data (e.g., URLs). High error correction (H) may reduce capacity.$cacheKey = md5($data);
if (!Storage::exists("qr/{$cacheKey}.png")) {
$qrCode->render($data, "qr/{$cacheKey}.png");
}
imagick or gd extensions post-generation:
$image = imagecreatefrompng('qr.png');
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagepng($image, 'qr_grayscale.png');
$data to prevent malicious payloads (e.g., XSS in URLs):
$data = filter_var($request->input('data'), FILTER_SANITIZE_URL);
QRCode class to test controller logic:
$mock = Mockery::mock('Aferrandini\PHPQRCode\QRCode');
$mock->shouldReceive('render')->once();
Storage facade to verify file generation:
$this->assertTrue(Storage::exists('qr/test.png'));
How can I help you explore Laravel packages today?