Skip to content

Commit a61c6b6

Browse files
author
Corey McCormick
committed
Add colors and gradients
1 parent bcca9bc commit a61c6b6

1 file changed

Lines changed: 64 additions & 8 deletions

File tree

src/SimpleSoftwareIO/QrCode/Generator.php

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
use BaconQrCode\Common\ErrorCorrectionLevel;
66
use BaconQrCode\Encoder\Encoder;
7+
use BaconQrCode\Renderer\Color\Alpha;
8+
use BaconQrCode\Renderer\Color\ColorInterface;
9+
use BaconQrCode\Renderer\Color\Rgb;
710
use BaconQrCode\Renderer\Eye\EyeInterface;
811
use BaconQrCode\Renderer\Eye\ModuleEye;
912
use BaconQrCode\Renderer\Eye\SimpleCircleEye;
@@ -15,9 +18,14 @@
1518
use BaconQrCode\Renderer\Module\RoundnessModule;
1619
use BaconQrCode\Renderer\Module\SquareModule;
1720
use BaconQrCode\Renderer\RendererInterface;
21+
use BaconQrCode\Renderer\RendererStyle\Fill;
1822
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
1923
use BaconQrCode\Writer;
2024
use InvalidArgumentException;
25+
use BaconQrCode\Renderer\Color\Gray;
26+
use BaconQrCode\Renderer\RendererStyle\EyeFill;
27+
use BaconQrCode\Renderer\RendererStyle\Gradient;
28+
use BaconQrCode\Renderer\RendererStyle\GradientType;
2129

2230
class Generator
2331
{
@@ -35,6 +43,14 @@ class Generator
3543

3644
protected $eyeStyle = null;
3745

46+
protected $color = null;
47+
48+
protected $backgroundColor = null;
49+
50+
protected $eyeColors = [];
51+
52+
protected $gradient;
53+
3854
public function generate(string $text, string $filename = null)
3955
{
4056
$render = $this->getRenderer();
@@ -52,28 +68,44 @@ public function size(int $pixels): self
5268
public function format(): self
5369
{
5470
//png, eps, svg, jpg
55-
//
5671
}
5772

58-
public function color($red, $green, $blue, $alpha): self
73+
public function color(int $red, int $green, int $blue, ?int $alpha = null): self
5974
{
75+
$this->color = $this->createColor($red, $green, $blue, $alpha);
76+
77+
return $this;
6078
}
6179

62-
public function backgroundColor($red, $green, $blue, $alpha): self
80+
public function backgroundColor($red, $green, $blue, ?int $alpha = null): self
6381
{
82+
$this->backgroundColor = $this->createColor($red, $green, $blue, $alpha);
83+
84+
return $this;
6485
}
6586

66-
public function eyeColor(array $eye1, array $eye2, array $eye3): self
87+
public function eyeColor($eyeNumber, array $innerColor, array $outterColor = null): self
6788
{
89+
if ($eyeNumber < 0 || $eyeNumber > 2) {
90+
throw new InvalidArgumentException("\$eyeNumber must be 0, 1, or 2. {$eyeNumber} is not valid.");
91+
}
92+
93+
$this->eyeColors[$eyeNumber] = new EyeFill(new Rgb(...$innerColor), new Rgb(...$outterColor));
94+
95+
return $this;
6896
}
6997

70-
public function gradient(): self
98+
public function gradient(array $startColor, array $endColor, string $type): self
7199
{
100+
$type = strtoupper($type);
101+
$this->gradient = new Gradient($this->createColor(...$startColor), $this->createColor(...$endColor), GradientType::$type());
102+
103+
return $this;
72104
}
73105

74106
public function eye(string $style): self
75107
{
76-
if (! in_array($style, ['square', 'circle'])) {
108+
if (! in_array($style, ['sqaure', 'circle'])) {
77109
throw new InvalidArgumentException("\$style must be square or circle. {$style} is not a valid eye style.");
78110
}
79111

@@ -85,7 +117,7 @@ public function eye(string $style): self
85117
public function style(string $style, float $size = 0.5): self
86118
{
87119
if (! in_array($style, ['square', 'dot', 'round'])) {
88-
throw new InvalidArgumentException("\$style must be square, dot, or round. {$style} is not a valid QrCode style.");
120+
throw new InvalidArgumentException("\$style must be square, dot, or round. {$style} is not a valid.");
89121
}
90122

91123
if ($size < 0 || $size >= 1) {
@@ -128,7 +160,7 @@ protected function getWriter(ImageRenderer $renderer): Writer
128160
protected function getRenderer(): ImageRenderer
129161
{
130162
$renderer = new ImageRenderer(
131-
new RendererStyle($this->pixels, $this->margin, $this->getModule(), $this->getEye()),
163+
new RendererStyle($this->pixels, $this->margin, $this->getModule(), $this->getEye(), $this->getFill()),
132164
new SvgImageBackEnd
133165
);
134166

@@ -160,4 +192,28 @@ protected function getEye(): EyeInterface
160192

161193
return (new ModuleEye($this->getModule()));
162194
}
195+
196+
protected function getFill(): Fill
197+
{
198+
$foregroundColor = $this->color ?? new Gray(100);
199+
$backgroundColor = $this->backgroundColor ?? new Gray(0);
200+
$eye1 = $this->eyeColors[0] ?? EyeFill::uniform(new Gray(0));
201+
$eye2 = $this->eyeColors[1] ?? EyeFill::uniform(new Gray(0));
202+
$eye3 = $this->eyeColors[2] ?? EyeFill::uniform(new Gray(0));
203+
204+
if ($this->gradient) {
205+
return Fill::withForegroundGradient($foregroundColor, $this->gradient, $eye1, $eye2, $eye3);
206+
}
207+
208+
return Fill::withForegroundColor($foregroundColor, $backgroundColor, $eye1, $eye2, $eye3);
209+
}
210+
211+
protected function createColor(int $red, int $green, int $blue, ?int $alpha = null): ColorInterface
212+
{
213+
if (! $alpha) {
214+
return new Rgb($red, $green, $blue);
215+
}
216+
217+
return new Alpha($alpha, new Rgb($red, $green, $blue));
218+
}
163219
}

0 commit comments

Comments
 (0)