xref: /plugin/dw2pdf/vendor/mpdf/qrcode/src/Output/Png.php (revision fb347f35dc824cf59875d883dbf86d311f54de06)
1*fb347f35SAndreas Gohr<?php
2*fb347f35SAndreas Gohr
3*fb347f35SAndreas Gohrnamespace Mpdf\QrCode\Output;
4*fb347f35SAndreas Gohr
5*fb347f35SAndreas Gohruse Mpdf\QrCode\QrCode;
6*fb347f35SAndreas Gohr
7*fb347f35SAndreas Gohrclass Png
8*fb347f35SAndreas Gohr{
9*fb347f35SAndreas Gohr
10*fb347f35SAndreas Gohr	/**
11*fb347f35SAndreas Gohr	 * @param \Mpdf\QrCode\QrCode $qrCode QR code instance
12*fb347f35SAndreas Gohr	 * @param int $w QR code width in pixels
13*fb347f35SAndreas Gohr	 * @param int[] $background RGB background color
14*fb347f35SAndreas Gohr	 * @param int[] $color RGB foreground and border color
15*fb347f35SAndreas Gohr	 * @param int $compression Level (0 - no compression, 9 - greatest compression)
16*fb347f35SAndreas Gohr	 *
17*fb347f35SAndreas Gohr	 * @return string Binary image data
18*fb347f35SAndreas Gohr	 */
19*fb347f35SAndreas Gohr	public function output(QrCode $qrCode, $w = 100, $background = [255, 255, 255], $color = [0, 0, 0], $compression = 0)
20*fb347f35SAndreas Gohr	{
21*fb347f35SAndreas Gohr		$qrSize = $qrCode->getQrSize();
22*fb347f35SAndreas Gohr		$final = $qrCode->getFinal();
23*fb347f35SAndreas Gohr
24*fb347f35SAndreas Gohr		if ($qrCode->isBorderDisabled()) {
25*fb347f35SAndreas Gohr			$minSize = 4;
26*fb347f35SAndreas Gohr			$maxSize = $qrSize - 4;
27*fb347f35SAndreas Gohr		} else {
28*fb347f35SAndreas Gohr			$minSize = 0;
29*fb347f35SAndreas Gohr			$maxSize = $qrSize;
30*fb347f35SAndreas Gohr		}
31*fb347f35SAndreas Gohr
32*fb347f35SAndreas Gohr		$size = $w;
33*fb347f35SAndreas Gohr		$s = $size / ($maxSize - $minSize);
34*fb347f35SAndreas Gohr
35*fb347f35SAndreas Gohr		$im = imagecreatetruecolor($size, $size);
36*fb347f35SAndreas Gohr		$foregroundColor = imagecolorallocate($im, $color[0], $color[1], $color[2]);
37*fb347f35SAndreas Gohr		$backgroundColor = imagecolorallocate($im, $background[0], $background[1], $background[2]);
38*fb347f35SAndreas Gohr		imagefilledrectangle($im, 0, 0, $size, $size, $backgroundColor);
39*fb347f35SAndreas Gohr
40*fb347f35SAndreas Gohr		for ($j = $minSize; $j < $maxSize; $j++) {
41*fb347f35SAndreas Gohr			for ($i = $minSize; $i < $maxSize; $i++) {
42*fb347f35SAndreas Gohr				if ($final[$i + $j * $qrSize + 1]) {
43*fb347f35SAndreas Gohr					imagefilledrectangle(
44*fb347f35SAndreas Gohr						$im,
45*fb347f35SAndreas Gohr						(int) round(($i - $minSize) * $s),
46*fb347f35SAndreas Gohr						(int) round(($j - $minSize) * $s),
47*fb347f35SAndreas Gohr						(int) round(($i - $minSize + 1) * $s - 1),
48*fb347f35SAndreas Gohr						(int) round(($j - $minSize + 1) * $s - 1),
49*fb347f35SAndreas Gohr						$foregroundColor
50*fb347f35SAndreas Gohr					);
51*fb347f35SAndreas Gohr				}
52*fb347f35SAndreas Gohr			}
53*fb347f35SAndreas Gohr		}
54*fb347f35SAndreas Gohr
55*fb347f35SAndreas Gohr		ob_start();
56*fb347f35SAndreas Gohr		imagepng($im, null, $compression);
57*fb347f35SAndreas Gohr		$data = ob_get_contents();
58*fb347f35SAndreas Gohr		ob_end_clean();
59*fb347f35SAndreas Gohr
60*fb347f35SAndreas Gohr		imagedestroy($im);
61*fb347f35SAndreas Gohr
62*fb347f35SAndreas Gohr		return $data;
63*fb347f35SAndreas Gohr	}
64*fb347f35SAndreas Gohr
65*fb347f35SAndreas Gohr}
66