1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php /** * BaconQrCode * * @link http://github.com/Bacon/BaconQrCode For the canonical source repository * @copyright 2013 Ben 'DASPRiD' Scholzen * @license http://opensource.org/licenses/BSD-2-Clause Simplified BSD License */
namespace BaconQrCode\Renderer\Image;
use BaconQrCode\Exception; use BaconQrCode\Renderer\Color\ColorInterface;
/** * PNG backend. */ class Png extends AbstractRenderer { /** * Image resource used when drawing. * * @var resource */ protected $image;
/** * Colors used for drawing. * * @var array */ protected $colors = array();
/** * init(): defined by RendererInterface. * * @see ImageRendererInterface::init() * @return void */ public function init() { $this->image = imagecreatetruecolor($this->finalWidth, $this->finalHeight); }
/** * addColor(): defined by RendererInterface. * * @see ImageRendererInterface::addColor() * @param string $id * @param ColorInterface $color * @return void * @throws Exception\RuntimeException */ public function addColor($id, ColorInterface $color) { if ($this->image === null) { throw new Exception\RuntimeException('Colors can only be added after init'); }
$color = $color->toRgb();
$this->colors[$id] = imagecolorallocate( $this->image, $color->getRed(), $color->getGreen(), $color->getBlue() ); }
/** * drawBackground(): defined by RendererInterface. * * @see ImageRendererInterface::drawBackground() * @param string $colorId * @return void */ public function drawBackground($colorId) { imagefill($this->image, 0, 0, $this->colors[$colorId]); }
/** * drawBlock(): defined by RendererInterface. * * @see ImageRendererInterface::drawBlock() * @param integer $x * @param integer $y * @param string $colorId * @return void */ public function drawBlock($x, $y, $colorId) { imagefilledrectangle( $this->image, $x, $y, $x + $this->blockSize - 1, $y + $this->blockSize - 1, $this->colors[$colorId] ); }
/** * getByteStream(): defined by RendererInterface. * * @see ImageRendererInterface::getByteStream() * @return string */ public function getByteStream() { ob_start(); imagepng($this->image); return ob_get_clean(); } }
|