Sfoglia il codice sorgente

:octocat: allow coloring the finder pattern dot individually (#52)

codemasher 5 anni fa
parent
commit
607a13620f
3 ha cambiato i file con 21 aggiunte e 9 eliminazioni
  1. 6 3
      examples/image.php
  2. 14 6
      src/Data/QRMatrix.php
  3. 1 0
      src/Output/QROutputInterface.php

+ 6 - 3
examples/image.php

@@ -17,15 +17,16 @@ require_once __DIR__.'/../vendor/autoload.php';
 $data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
 
 $options = new QROptions([
-	'version'      => 7,
+	'version'      => 10,
 	'outputType'   => QRCode::OUTPUT_IMAGE_PNG,
-	'eccLevel'     => QRCode::ECC_L,
+	'eccLevel'     => QRCode::ECC_H,
 	'scale'        => 5,
 	'imageBase64'  => false,
 	'moduleValues' => [
 		// finder
 		1536 => [0, 63, 255], // dark (true)
 		6    => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
+		5632 => [241, 28, 163], // finder dot, dark (true)
 		// alignment
 		2560 => [255, 0, 255],
 		10   => [255, 255, 255],
@@ -33,7 +34,7 @@ $options = new QROptions([
 		3072 => [255, 0, 0],
 		12   => [255, 255, 255],
 		// format
-		3584 => [67, 191, 84],
+		3584 => [67, 99, 84],
 		14   => [255, 255, 255],
 		// version
 		4096 => [62, 174, 190],
@@ -47,6 +48,8 @@ $options = new QROptions([
 		8    => [255, 255, 255],
 		// quietzone
 		18   => [255, 255, 255],
+		// logo
+		20    => [255, 255, 255],
 	],
 ]);
 

+ 14 - 6
src/Data/QRMatrix.php

@@ -48,6 +48,8 @@ final class QRMatrix{
 	/** @var int */
 	public const M_LOGO       = 0x14;
 	/** @var int */
+	public const M_FINDER_DOT = 0x16;
+	/** @var int */
 	public const M_TEST       = 0xff;
 
 	/**
@@ -369,12 +371,18 @@ final class QRMatrix{
 		foreach($pos as $c){
 			for($y = 0; $y < 7; $y++){
 				for($x = 0; $x < 7; $x++){
-					$this->set(
-						$c[0] + $y,
-						$c[1] + $x,
-						!(($x > 0 && $x < 6 && ($y === 1 || $y === 5)) || ($y > 0 && $y < 6 && ($x === 1 || $x === 5))),
-						$this::M_FINDER
-					);
+					// outer (dark) 7*7 square
+					if($x === 0 || $x === 6 || $y === 0 || $y === 6){
+						$this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER);
+					}
+					// inner (light) 5*5 square
+					elseif($x === 1 || $x === 5 || $y === 1 || $y === 5){
+						$this->set($c[0] + $y, $c[1] + $x, false, $this::M_FINDER);
+					}
+					// 3*3 dot
+					else{
+						$this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER_DOT);
+					}
 				}
 			}
 		}

+ 1 - 0
src/Output/QROutputInterface.php

@@ -40,6 +40,7 @@ interface QROutputInterface{
 		QRMatrix::M_TIMING << 8     => true,  // 3072
 		QRMatrix::M_FORMAT << 8     => true,  // 3584
 		QRMatrix::M_VERSION << 8    => true,  // 4096
+		QRMatrix::M_FINDER_DOT << 8 => true,  // 5632
 		QRMatrix::M_TEST << 8       => true,  // 65280
 	];