chore: complete update

This commit is contained in:
2025-07-17 16:24:20 +02:00
parent 899227b0a4
commit 64a7051137
1300 changed files with 85570 additions and 2756 deletions

View File

@@ -0,0 +1,113 @@
<?php
declare(strict_types=1);
namespace App\Domain\QrCode\ValueObject;
readonly class QrCodeMatrix
{
public function __construct(
private array $matrix
) {
}
public function getMatrix(): array
{
return $this->matrix;
}
public function getSize(): int
{
return count($this->matrix);
}
public function getModule(int $row, int $col): bool
{
return $this->matrix[$row][$col] ?? false;
}
public function toSvg(int $moduleSize = 4, int $margin = 4, string $foreground = '#000000', string $background = '#FFFFFF'): string
{
// Stellen Sie sicher, dass der Margin mindestens 4 Module beträgt (Quiet Zone)
$margin = max(4, $margin);
$size = $this->getSize();
$totalSize = ($size + 2 * $margin) * $moduleSize;
$svg = sprintf(
'<svg width="%d" height="%d" viewBox="0 0 %d %d" xmlns="http://www.w3.org/2000/svg">',
$totalSize, $totalSize, $totalSize, $totalSize
);
$svg .= sprintf('<rect width="100%%" height="100%%" fill="%s"/>', $background);
for ($row = 0; $row < $size; $row++) {
for ($col = 0; $col < $size; $col++) {
if ($this->getModule($row, $col)) {
$x = ($col + $margin) * $moduleSize;
$y = ($row + $margin) * $moduleSize;
$svg .= sprintf(
'<rect x="%d" y="%d" width="%d" height="%d" fill="%s"/>',
$x, $y, $moduleSize, $moduleSize, $foreground
);
}
}
}
$svg .= '</svg>';
return $svg;
}
public function toPng(int $moduleSize = 4, int $margin = 4): string
{
// Stellen Sie sicher, dass der Margin mindestens 4 Module beträgt (Quiet Zone)
$margin = max(4, $margin);
$size = $this->getSize();
$totalSize = ($size + 2 * $margin) * $moduleSize;
$image = imagecreate($totalSize, $totalSize);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
for ($row = 0; $row < $size; $row++) {
for ($col = 0; $col < $size; $col++) {
if ($this->getModule($row, $col)) {
$x1 = ($col + $margin) * $moduleSize;
$y1 = ($row + $margin) * $moduleSize;
$x2 = $x1 + $moduleSize - 1;
$y2 = $y1 + $moduleSize - 1;
imagefilledrectangle($image, $x1, $y1, $x2, $y2, $black);
}
}
}
ob_start();
imagepng($image);
$pngData = ob_get_contents();
ob_end_clean();
imagedestroy($image);
return $pngData;
}
public function toAscii(): string
{
$size = $this->getSize();
$result = '';
for ($row = 0; $row < $size; $row++) {
for ($col = 0; $col < $size; $col++) {
$result .= $this->getModule($row, $col) ? '██' : ' ';
}
$result .= "\n";
}
return $result;
}
}