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