44
55use BaconQrCode \Common \ErrorCorrectionLevel ;
66use BaconQrCode \Encoder \Encoder ;
7+ use BaconQrCode \Renderer \Color \Alpha ;
8+ use BaconQrCode \Renderer \Color \ColorInterface ;
9+ use BaconQrCode \Renderer \Color \Rgb ;
710use BaconQrCode \Renderer \Eye \EyeInterface ;
811use BaconQrCode \Renderer \Eye \ModuleEye ;
912use BaconQrCode \Renderer \Eye \SimpleCircleEye ;
1518use BaconQrCode \Renderer \Module \RoundnessModule ;
1619use BaconQrCode \Renderer \Module \SquareModule ;
1720use BaconQrCode \Renderer \RendererInterface ;
21+ use BaconQrCode \Renderer \RendererStyle \Fill ;
1822use BaconQrCode \Renderer \RendererStyle \RendererStyle ;
1923use BaconQrCode \Writer ;
2024use 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
2230class 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