Fuente: https://github.com/chamilo/chamilo-lms/releases/download/v1.11.40/chamilo-1.11.40.zip sha256: 1cf4bf2cc7bae1ef1a1eff643235db1d552f78ddf4b6dd1e2d2dac9868679439 Snapshot independiente (rama huerfana); diffable vs 1.11.38. vendor incluido.
93 lines
2.6 KiB
PHP
93 lines
2.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* (c) Jeroen van den Enden <info@endroid.nl>
|
|
*
|
|
* This source file is subject to the MIT license that is bundled
|
|
* with this source code in the file LICENSE.
|
|
*/
|
|
|
|
namespace Endroid\QrCode\Writer;
|
|
|
|
use BaconQrCode\Renderer\Image\Svg;
|
|
use BaconQrCode\Writer;
|
|
use Endroid\QrCode\QrCodeInterface;
|
|
use SimpleXMLElement;
|
|
|
|
class SvgWriter extends AbstractBaconWriter
|
|
{
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function writeString(QrCodeInterface $qrCode)
|
|
{
|
|
$renderer = new Svg();
|
|
$renderer->setWidth($qrCode->getSize());
|
|
$renderer->setHeight($qrCode->getSize());
|
|
$renderer->setMargin(0);
|
|
$renderer->setForegroundColor($this->convertColor($qrCode->getForegroundColor()));
|
|
$renderer->setBackgroundColor($this->convertColor($qrCode->getBackgroundColor()));
|
|
|
|
$writer = new Writer($renderer);
|
|
$string = $writer->writeString($qrCode->getText(), $qrCode->getEncoding(), $this->convertErrorCorrectionLevel($qrCode->getErrorCorrectionLevel()));
|
|
|
|
$string = $this->addMargin($string, $qrCode->getMargin(), $qrCode->getSize());
|
|
|
|
return $string;
|
|
}
|
|
|
|
/**
|
|
* @param string $string
|
|
* @param int $margin
|
|
* @param int $size
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function addMargin($string, $margin, $size)
|
|
{
|
|
$targetSize = $size + $margin * 2;
|
|
|
|
$xml = new SimpleXMLElement($string);
|
|
$xml['width'] = $targetSize;
|
|
$xml['height'] = $targetSize;
|
|
$xml['viewBox'] = '0 0 '.$targetSize.' '.$targetSize;
|
|
$xml->rect['width'] = $targetSize;
|
|
$xml->rect['height'] = $targetSize;
|
|
|
|
$additionalWhitespace = $targetSize;
|
|
foreach ($xml->use as $block) {
|
|
$additionalWhitespace = min($additionalWhitespace, (int) $block['x']);
|
|
}
|
|
|
|
$sourceBlockSize = (int) $xml->defs->rect['width'];
|
|
$blockCount = ($size - 2 * $additionalWhitespace) / $sourceBlockSize;
|
|
$targetBlockSize = $size / $blockCount;
|
|
|
|
$xml->defs->rect['width'] = $targetBlockSize;
|
|
$xml->defs->rect['height'] = $targetBlockSize;
|
|
|
|
foreach ($xml->use as $block) {
|
|
$block['x'] = $margin + $targetBlockSize * ($block['x'] - $additionalWhitespace) / $sourceBlockSize;
|
|
$block['y'] = $margin + $targetBlockSize * ($block['y'] - $additionalWhitespace) / $sourceBlockSize;
|
|
}
|
|
|
|
return $xml->asXML();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function getContentType()
|
|
{
|
|
return 'image/svg+xml';
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function getSupportedExtensions()
|
|
{
|
|
return ['svg'];
|
|
}
|
|
}
|