Added support to return the QR code in SVG format

This commit is contained in:
Alejandro Celaya 2020-09-21 22:48:52 +02:00
parent 319b790628
commit 55d9f2a4a1
2 changed files with 25 additions and 0 deletions

View file

@ -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"
}
}
}
}

View file

@ -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);
}