Aller au contenu

Logos

phil/qr-code

Un logo se place dans la zone qu'un code garde en son centre, et la correction d'erreurs compense les modules qu'il cache.

$code = QrCode::encode('https://example.com/tickets/42', logoZone: 0.25);
$logo = Logo::fromFile(__DIR__.'/logo.svg');

$svg = new SvgWriter()->write($code, 'Ticket 42', $logo);
$png = new PngWriter(8)->write($code, Logo::fromFile(__DIR__.'/logo.png'));

La zone

$logoZone relève le niveau à High et choisit la plus petite version dont chaque bloc peut corriger la zone en gardant la moitié de sa capacité en réserve : voir Encodage. Une zone de 0,2 à 0,25 du côté convient à la plupart des logos ; 0,3 est la plus grande.

L'image

Logo::fromBytes() et Logo::fromFile() lisent une image PNG, JPEG, WebP ou SVG d'au plus 1 Mio, reconnue par ses premiers octets, jamais par un nom de fichier ou un type de média fourni par quelqu'un. mediaType dit lequel, et dataUri() la donne sous forme d'URI data:.

MoteurFormatsComment
SvgWriterles quatreun <image> avec une URI data:, à un demi-module à l'intérieur de la zone, preserveAspectRatio="xMidYMid meet"
PngWriterPNG, JPEG, WebPdessiné avec GD, ajusté et centré, la transparence fondue sur la couleur claire

Gardez une marge claire dans le logo lui-même et un fort contraste autour : les modules propres à la zone sont clairs.