PHP code example of devxisas / qr-studio

1. Go to this page and download the library: Download devxisas/qr-studio library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

devxisas / qr-studio example snippets


use Devxisas\QrStudio\Facades\QrCode;

// Generate an SVG (default) — safe to render directly in Blade with {!! !!}
$svg = QrCode::generate('https://devxi.com');

// Save to a file
QrCode::generate('https://devxi.com', '/path/to/qrcode.svg');

use Devxisas\QrStudio\Enums\ErrorCorrection;
use Devxisas\QrStudio\Enums\Format;
use Devxisas\QrStudio\Enums\Theme;

return [
    // Output
    'format'           => Format::Svg,            // Format enum or 'svg' | 'eps' | 'png'
    'size'             => 100,                     // pixels
    'margin'           => 0,                       // quiet zone around the code
    'error_correction' => ErrorCorrection::Medium, // enum or 'L' | 'M' | 'Q' | 'H'
    'encoding'         => 'UTF-8',                 // character encoding

    // Visual theme — applies a full visual preset to every QR code globally
    'theme'            => null,                    // null | 'ocean'|'sunset'|'forest'|'midnight'|'coral' | Theme enum

    // Storage — used by saveToDisk() when no disk/path is specified per call
    'disk'             => 'local',                 // any disk from config/filesystems.php
    'path'             => 'qrcodes',               // default directory on that disk
];

use Devxisas\QrStudio\Enums\Format;

QrCode::generate('...');                          // SVG (default)
QrCode::format('png')->generate('...');           // PNG
QrCode::format(Format::Png)->generate('...');     // PNG via enum
QrCode::format('eps')->generate('...');           // EPS (vector, no browser preview)

QrCode::size(300)->generate('...');
QrCode::size(300)->margin(4)->generate('...');

use Devxisas\QrStudio\Enums\ErrorCorrection;

QrCode::errorCorrection('H')->generate('...');
QrCode::errorCorrection(ErrorCorrection::High)->generate('...');

use Devxisas\QrStudio\Enums\Style;

QrCode::style('square')->generate('...');          // default
QrCode::style('dot', 0.5)->generate('...');
QrCode::style('round', 0.7)->generate('...');

// Enum API
QrCode::style(Style::Dot, 0.5)->generate('...');

use Devxisas\QrStudio\Enums\EyeStyle;

QrCode::eye('square')->generate('...');   // default
QrCode::eye('circle')->generate('...');
QrCode::eye('pointy')->generate('...');   // new in BaconQrCode 3.x — curved outer + circle inner

// Enum API
QrCode::eye(EyeStyle::Circle)->generate('...');
QrCode::eye(EyeStyle::Pointy)->generate('...');

QrCode::color(59, 130, 246)->generate('...');
QrCode::color(255, 255, 255)->backgroundColor(15, 23, 42)->generate('...');

// With alpha (0–127, where 127 = fully transparent)
QrCode::color(59, 130, 246, 50)->generate('...');

QrCode::eyeColor(0, 239, 68, 68)           // eye 0 — red (inner = outer)
      ->eyeColor(1, 34, 197, 94)           // eye 1 — green
      ->eyeColor(2, 59, 130, 246)          // eye 2 — blue
      ->generate('...');

// With separate inner and outer colors
// eyeColor(eye, innerR, innerG, innerB, outerR, outerG, outerB)
QrCode::eyeColor(0, 255, 255, 255, 59, 130, 246)->generate('...');

use Devxisas\QrStudio\Enums\GradientType;

// gradient(startR, startG, startB, endR, endG, endB, type)
QrCode::gradient(59, 130, 246, 168, 85, 247, 'radial')->generate('...');

// Enum API
QrCode::gradient(59, 130, 246, 168, 85, 247, GradientType::Radial)->generate('...');

// From a file path
QrCode::format('png')
      ->errorCorrection('H')
      ->merge('/path/to/logo.png', 0.3)
      ->generate('https://devxi.com');

// From a string (e.g. fetched via HTTP)
QrCode::format('png')
      ->errorCorrection('H')
      ->mergeString(file_get_contents('/path/to/logo.png'), 0.3)
      ->generate('https://devxi.com');

$uri = QrCode::size(200)->toDataUri('https://devxi.com');
// → "data:image/svg+xml;base64,..."

// PNG
$uri = QrCode::size(200)->format('png')->toDataUri('https://devxi.com');
// → "data:image/png;base64,..."

// Uses config defaults for format and size
return response()->qrcode('https://devxi.com');

// Override format and size per call
return response()->qrcode('https://devxi.com', 'png', 300);

// Using enum
use Devxisas\QrStudio\Enums\Format;
return response()->qrcode('https://devxi.com', Format::Png, 300);

// Route example
Route::get('/qr/{url}', fn (string $url) => response()->qrcode($url, 'png'));

QrCode::generate('https://devxi.com');
QrCode::generate('Plain text content');

QrCode::email('[email protected]', 'Subject', 'Body text');

QrCode::phoneNumber('+50312345678');

QrCode::sms('+50312345678', 'Message body');

QrCode::geo(13.6929, -89.2182);  // latitude, longitude

QrCode::wifi([
    'encryption' => 'WPA',       // WPA | WEP | nopass
    'ssid'       => 'NetworkName',
    'password'   => 'secret123',
    'hidden'     => false,        // optional
]);

QrCode::btc('1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf', '0.001', [
    'label'         => 'Donation',   // optional
    'message'       => 'Thank you',  // optional
    'returnAddress' => 'bc1q...',    // optional
]);

QrCode::errorCorrection('H')->vCard([
    'name'    => 'Sorto;Elmer',   // LastName;FirstName
    'email'   => '[email protected]',
    'phone'   => '+50312345678',
    'org'     => 'Devxisas',
    'title'   => 'Developer',
    'url'     => 'https://devxi.com',
    'address' => 'San Salvador, El Salvador',  // optional
    'note'    => 'Some note',                   // optional
]);

QrCode::meCard([
    'name'    => 'Sorto,Elmer',
    'phone'   => '+50312345678',
    'email'   => '[email protected]',
    'url'     => 'https://devxi.com',
    'address' => 'San Salvador',   // optional
    'note'    => 'Some note',      // optional
]);

QrCode::calendarEvent([
    'summary'     => 'Laravel Meetup SV',
    'start'       => '2025-06-15 18:00:00',
    'end'         => '2025-06-15 20:00:00',
    'location'    => 'San Salvador, El Salvador',  // optional
    'description' => 'Monthly Laravel meetup',      // optional
    'url'         => 'https://devxi.com',            // optional
]);

// With Carbon / DateTimeInterface
QrCode::calendarEvent([
    'summary' => 'Meeting',
    'start'   => now()->addDay(),
    'end'     => now()->addDay()->addHours(2),
]);

QrCode::whatsApp('+50312345678');

// With pre-filled message
QrCode::whatsApp('+50312345678', '¡Hola! Vi tu QR y quiero más información.');

use Devxisas\QrStudio\Enums\Theme;

QrCode::theme('ocean')->generate('...');
QrCode::theme(Theme::Sunset)->generate('...');

// Per-call options override the theme
QrCode::theme('ocean')->size(300)->eye('square')->generate('...');

// Set a global default in config/qr-studio.php
'theme' => 'ocean',
'theme' => Theme::Midnight,

// Save to default disk ('local') at default path ('qrcodes/')
$path = QrCode::format('png')->size(300)->saveToDisk(
    'https://devxi.com',
    'my-qr.png'
);
// → saves to storage/app/qrcodes/my-qr.png
// → returns 'qrcodes/my-qr.png'

// Full path — directory separator present, no prefix added
QrCode::saveToDisk('https://devxi.com', 'invoices/2025/001F.svg');

// Override disk per call (any disk from config/filesystems.php)
QrCode::format('png')->saveToDisk('https://devxi.com', 'qr.png', 's3');

// Get a public URL after saving
$url = Storage::disk('s3')->url($path);

// Combine with themes
QrCode::theme('ocean')->format('png')->size(400)->saveToDisk(
    'https://devxi.com',
    'branded.png',
    's3'
);

'disk' => 's3',         // default disk for all saveToDisk() calls
'path' => 'qrcodes',    // default directory when filename has no '/'

// Save the model's QR code to disk
$document->saveQrCodeToDisk('facturas/001F.png');
$document->saveQrCodeToDisk('001F.png', 's3');            // override disk
$user->saveQrCodeToDisk('contacts/elmer.png', null, Format::Svg);  // SVG

use Devxisas\QrStudio\Traits\HasQrCode;

class Product extends Model
{
    use HasQrCode;

    public function qrCodeData(): string
    {
        return route('products.show', $this);
    }
}

// In controllers or Blade:
$product->qrCodeSvg();          // inline SVG (uses size from config)
$product->qrCodeSvg(300);       // 300 px SVG
$product->qrCodeDataUri();      // PNG data URI for <img src="...">
$product->qrCodeDataUri(300);   // PNG at 300 px

use Devxisas\QrStudio\Traits\HasQrCode;

// Contact card — encodes a MeCard QR code
class Contact extends Model
{
    use HasQrCode;

    public function qrCodeType(): string { return 'meCard'; }

    public function qrCodeData(): array
    {
        return [
            'name'  => $this->last_name . ',' . $this->first_name,
            'email' => $this->email,
            'phone' => $this->phone ?? '',
            'url'   => route('contacts.show', $this),
        ];
    }
}

// Office / venue — encodes a WiFi QR code
class Office extends Model
{
    use HasQrCode;

    public function qrCodeType(): string { return 'wifi'; }

    public function qrCodeData(): array
    {
        return [
            'encryption' => 'WPA',
            'ssid'       => $this->wifi_ssid,
            'password'   => $this->wifi_password,
        ];
    }
}

// User profile — encodes a vCard QR code
class User extends Model
{
    use HasQrCode;

    public function qrCodeType(): string { return 'vCard'; }

    public function qrCodeData(): array
    {
        return [
            'name'  => $this->last_name . ';' . $this->first_name,
            'email' => $this->email,
            'phone' => $this->phone ?? '',
            'url'   => route('users.show', $this),
        ];
    }
}

QrCode::size(250)
      ->format('png')
      ->style('dot', 0.5)
      ->eye('circle')
      ->gradient(59, 130, 246, 99, 102, 241, 'radial')
      ->errorCorrection('H')
      ->generate('https://devxi.com');

QrCode::size(250)
      ->style('round', 0.7)
      ->eye('square')
      ->color(16, 185, 129)
      ->backgroundColor(15, 23, 42)
      ->margin(2)
      ->generate('https://devxi.com');

// Returns HtmlString — embed directly in Blade
$svg = QrCode::size(200)->generate('https://devxi.com');

// Write to file — returns null
QrCode::format('png')->size(300)->generate('https://devxi.com', '/var/www/qr.png');

$uri = QrCode::size(200)->toDataUri('https://devxi.com');
// → "data:image/svg+xml;base64,..."

// In Blade
<img src="{{ QrCode::size(200)->format('png')->toDataUri('https://devxi.com') }}" alt="QR">

QrCode::format('png')->generate('...');
QrCode::format(Format::Png)->generate('...');

QrCode::size(300)->generate('...');

QrCode::size(300)->margin(4)->generate('...');

QrCode::encoding('ISO-8859-1')->generate('...');

QrCode::errorCorrection('H')->generate('...');
QrCode::errorCorrection(ErrorCorrection::High)->generate('...');

// Correct — always 0.5)->eye('square')->errorCorrection('H')->generate('...');

// Wrong — finder eyes will be invisible, code will not scan
QrCode::style('dot', 0.5)->generate('...');

QrCode::eye('circle')->generate('...');
QrCode::eye(EyeStyle::Pointy)->generate('...');

// Required with dot/round modules
QrCode::style('dot', 0.5)->eye('square')->errorCorrection('H')->generate('...');

QrCode::color(59, 130, 246)->generate('...');
QrCode::color(59, 130, 246, 50)->generate('...');  // semi-transparent

QrCode::color(255, 255, 255)->backgroundColor(15, 23, 42)->generate('...');

QrCode::eyeColor(0, 239, 68, 68)           // eye 0 — red inner, black outer
      ->eyeColor(1, 34, 197, 94)           // eye 1 — green inner, black outer
      ->eyeColor(2, 59, 130, 246)          // eye 2 — blue inner, black outer
      ->generate('...');

// Separate inner and outer colors
QrCode::eyeColor(0, 255, 255, 255, 59, 130, 246)->generate('...');

QrCode::gradient(59, 130, 246, 168, 85, 247, 'radial')->generate('...');
QrCode::gradient(59, 130, 246, 168, 85, 247, GradientType::Radial)->generate('...');

use Devxisas\QrStudio\Enums\Theme;

// Apply a preset
QrCode::theme('ocean')->size(300)->generate('https://devxi.com');

// Override one value from the preset
QrCode::theme(Theme::Sunset)->size(300)->color(0, 0, 0)->generate('...');

// Save to default disk and path (config defaults)
$path = QrCode::format('png')->size(300)->saveToDisk('https://devxi.com', 'user-42.png');
// → "qrcodes/user-42.png"

// Explicit directory in filename — skips config path prefix
$path = QrCode::saveToDisk('https://devxi.com', 'invoices/2025/001F.svg');
// → "invoices/2025/001F.svg"

// Save to S3
$path = QrCode::format('png')->saveToDisk('https://devxi.com', 'qr.png', 's3');

// Combine theme + saveToDisk
QrCode::theme('ocean')->format('png')->size(400)->saveToDisk('https://devxi.com', 'ocean.png', 's3');

QrCode::format('png')
      ->errorCorrection('H')
      ->merge('/path/to/logo.png', 0.25)
      ->generate('https://devxi.com');

QrCode::format('png')
      ->errorCorrection('H')
      ->mergeString(file_get_contents('/path/to/logo.png'), 0.25)
      ->generate('https://devxi.com');

// Wrong — finder eyes are invisible, code will not scan
QrCode::style('dot', 0.5)->generate('...');

// Correct
QrCode::style('dot', 0.5)->eye('square')->errorCorrection('H')->generate('...');

// Throws RuntimeException if Imagick is not installed:
QrCode::format('png')->gradient(59, 130, 246, 168, 85, 247, 'radial')->generate('...');

// Always works — use SVG when Imagick is unavailable:
QrCode::gradient(59, 130, 246, 168, 85, 247, 'radial')->generate('...');

// Correct
QrCode::format('png')->errorCorrection('H')->merge('/logo.png', 0.25)->generate('...');

// Silent no-op — SVG output, logo ignored
QrCode::merge('/logo.png', 0.25)->generate('...');

QrCode::gradient(200, 220, 255, 240, 245, 255, 'radial')
      ->eyeColor(0, 10, 10, 80, 10, 10, 80)
      ->eyeColor(1, 10, 10, 80, 10, 10, 80)
      ->eyeColor(2, 10, 10, 80, 10, 10, 80)
      ->generate('...');

QrCode::style('dot', 1.0);  // throws InvalidArgumentException
QrCode::style('dot', 0.6);  // recommended

// Unreliable — default EC is M
QrCode::style('dot', 0.5)->eye('square')->generate('...');

// Reliable
QrCode::style('dot', 0.5)->eye('square')->errorCorrection('H')->generate('...');

// Wrong — state is reset after first generate(), second call uses defaults only
QrCode::size(300)->format('png');
QrCode::generate('...');

// Correct — configure everything in a single fluent chain
QrCode::size(300)->format('png')->generate('...');

use Devxisas\QrStudio\Enums\Format;
use Devxisas\QrStudio\Enums\Style;
use Devxisas\QrStudio\Enums\EyeStyle;
use Devxisas\QrStudio\Enums\ErrorCorrection;
use Devxisas\QrStudio\Enums\GradientType;
use Devxisas\QrStudio\Enums\Theme;

Format::Svg          // 'svg'
Format::Eps          // 'eps'
Format::Png          // 'png'

Style::Square        // 'square'
Style::Dot           // 'dot'
Style::Round         // 'round'

EyeStyle::Square     // 'square'
EyeStyle::Circle     // 'circle'
EyeStyle::Pointy     // 'pointy'  — curved outer corner + circle inner (BaconQrCode 3.x)

ErrorCorrection::Low       // 'L'
ErrorCorrection::Medium    // 'M'
ErrorCorrection::Quartile  // 'Q'
ErrorCorrection::High      // 'H'

GradientType::Horizontal       // 'horizontal'
GradientType::Vertical         // 'vertical'
GradientType::Diagonal         // 'diagonal'
GradientType::InverseDiagonal  // 'inverse_diagonal'
GradientType::Radial           // 'radial'

Theme::Ocean     // 'ocean'
Theme::Sunset    // 'sunset'
Theme::Forest    // 'forest'
Theme::Midnight  // 'midnight'
Theme::Coral     // 'coral'

// Before
use SimpleSoftwareIO\QrCode\Facades\QrCode;

// After
use Devxisas\QrStudio\Facades\QrCode;
bash
php artisan vendor:publish --tag="qr-studio-config"