diff --git a/docs/swagger/paths/{shortCode}_qr-code.json b/docs/swagger/paths/{shortCode}_qr-code.json index 300a7429..a3fdaffb 100644 --- a/docs/swagger/paths/{shortCode}_qr-code.json +++ b/docs/swagger/paths/{shortCode}_qr-code.json @@ -27,6 +27,19 @@ "maximum": 1000, "default": 300 } + }, + { + "name": "format", + "in": "query", + "description": "The format for the QR code image, being valid values png and svg. Not providing the param or providing any other value will fall back to png.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "png", + "svg" + ] + } } ], "responses": { @@ -38,6 +51,12 @@ "type": "string", "format": "binary" } + }, + "image/svg+xml": { + "schema": { + "type": "string", + "format": "binary" + } } } } diff --git a/module/Core/src/Action/QrCodeAction.php b/module/Core/src/Action/QrCodeAction.php index 979e34fe..4a8b7db5 100644 --- a/module/Core/src/Action/QrCodeAction.php +++ b/module/Core/src/Action/QrCodeAction.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Action; use Endroid\QrCode\QrCode; +use Endroid\QrCode\Writer\SvgWriter; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Server\MiddlewareInterface; @@ -51,6 +52,11 @@ class QrCodeAction implements MiddlewareInterface $qrCode->setSize($this->getSizeParam($request)); $qrCode->setMargin(0); + $format = $request->getQueryParams()['format'] ?? 'png'; + if ($format === 'svg') { + $qrCode->setWriter(new SvgWriter()); + } + return new QrCodeResponse($qrCode); }