Bacon / BaconQrCode

QR Code Generator for PHP
BSD 2-Clause "Simplified" License
1.83k stars 208 forks source link

QRCode gets trimmed because of margin when ImagickBackend is used with Gradient #79

Closed restyler closed 2 years ago

restyler commented 3 years ago

Everything works fine with SVG but PNG has issues. simple-qrcode v.4.1.0 php 7.4.13 imagick module 3.4.4

image

<?php
ini_set('display_errors', 1);

require_once '../vendor/autoload.php';

use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\Image\ImagickImageBackEnd;
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Renderer\Module\SquareModule;
use BaconQrCode\Renderer\Eye\SquareEye;
use BaconQrCode\Writer;
use BaconQrCode\Renderer\RendererStyle\Gradient;
use \BaconQrCode\Renderer\Color\Rgb;
use \BaconQrCode\Renderer\RendererStyle\{GradientType, EyeFill, Fill};

$size = 400;
$margin = 2;

$eye = SquareEye::instance();

$squareModule = SquareModule::instance();
$eyeFill = new EyeFill(new Rgb(100,100,55), new Rgb(100,100,255));

$format = $_GET['format'] ?? 'png';
$backend = ($format == 'png') ? new ImagickImageBackEnd() : new SvgImageBackEnd();

$gradient = new Gradient(new Rgb(100,100,55), new Rgb(100,100,255), GradientType::HORIZONTAL());

$renderer = new ImageRenderer(
    new RendererStyle($size, $margin, $squareModule, $eye, 
        Fill::withForegroundGradient(new Rgb(255,255,255), $gradient, $eyeFill, $eyeFill, $eyeFill)),
    $backend
);

$writer = new Writer($renderer);
if ($format == 'png') {
    header('Content-type: image/png');
}

echo $writer->writeString('https://apiroad.net/very-long-url');