Files
2026-03-17 19:05:34 +01:00

93 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# QRMarkupSVG
[Class `QRMarkupSVG`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QRMarkupSVG.php):
[Scalable Vector Graphics](https://developer.mozilla.org/en-US/docs/Glossary/SVG) (SVG) output.
## Example
See: [SVG example](https://github.com/chillerlan/php-qrcode/blob/main/examples/svg.php)
Set the options:
```php
$options = new QROptions;
$options->version = 7;
$options->outputInterface = QRMarkupSVG::class;
// if set to false, the light modules won't be rendered
$options->drawLightModules = true;
$options->svgUseFillAttributes = true;
// draw the modules as circles isntead of squares
$options->drawCircularModules = true;
$options->circleRadius = 0.4;
// connect paths to avoid render glitches
// @see https://github.com/chillerlan/php-qrcode/issues/57
$options->connectPaths = true;
// keep modules of these types as square
$options->keepAsSquare = [
QRMatrix::M_FINDER_DARK,
QRMatrix::M_FINDER_DOT,
QRMatrix::M_ALIGNMENT_DARK,
];
// add a gradient via the <defs> element
// @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs
// @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient
$options->svgDefs = '
<linearGradient id="rainbow" x1="1" y2="1">
<stop stop-color="#e2453c" offset="0"/>
<stop stop-color="#e07e39" offset="0.2"/>
<stop stop-color="#e5d667" offset="0.4"/>
<stop stop-color="#51b95b" offset="0.6"/>
<stop stop-color="#1e72b7" offset="0.8"/>
<stop stop-color="#6f5ba7" offset="1"/>
</linearGradient>
<style><![CDATA[
.dark{fill: url(#rainbow);}
.light{fill: #eee;}
]]></style>';
```
Render the output:
```php
$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
$out = new QRCode($options)->render($data); // -> data:image/svg+xml;base64,PD94bWwgdmVyc2...
printf('<img alt="%s" src="%s" />', $alt, $out);
```
## Additional methods
| method | return | description |
|---------------------------------------------------|----------|---------------------------------------------------------------|
| (protected) `getCssClass(int $M_TYPE = 0)` | `string` | returns a string with all css classes for the current element |
| (protected) `getViewBox()` | `string` | returns the value for the SVG viewBox attribute |
| (protected) `header()` | `string` | returns the `<svg>` header with the given options parsed |
| (protected) `path(string $path, int $M_TYPE)` | `string` | renders and returns a single `<path>` element |
| (protected) `paths()` | `string` | returns one or more SVG `<path>` elements |
| (protected) `module(int $x, int $y, int $M_TYPE)` | `string` | returns a path segment for a single module |
## Options that affect this class
| property | type |
|---------------------------|-------------|
| `$circleRadius` | `float` |
| `$connectPaths` | `bool` |
| `$cssClass` | `string` |
| `$drawCircularModules` | `bool` |
| `$drawLightModules` | `bool` |
| `$eol` | `string` |
| `$excludeFromConnect` | `array` |
| `$keepAsSquare` | `array` |
| `$outputBase64` | `bool` |
| `$svgAddXmlHeader` | `bool` |
| `$svgDefs` | `string` |
| `$svgOpacity` | `float` |
| `$svgPreserveAspectRatio` | `string` |
| `$svgViewBoxSize` | `int\|null` |
| `$svgUseFillAttributes` | `bool` |