From 607a13620fd7b2c71eaaaf29f7d07829fdb5c654 Mon Sep 17 00:00:00 2001 From: codemasher Date: Sun, 15 Nov 2020 15:11:29 +0100 Subject: [PATCH] :octocat: allow coloring the finder pattern dot individually (#52) --- examples/image.php | 9 ++++++--- src/Data/QRMatrix.php | 20 ++++++++++++++------ src/Output/QROutputInterface.php | 1 + 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/examples/image.php b/examples/image.php index 89ba2a9a8..2f6108b86 100644 --- a/examples/image.php +++ b/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], ], ]); diff --git a/src/Data/QRMatrix.php b/src/Data/QRMatrix.php index 479204443..890fc231a 100755 --- a/src/Data/QRMatrix.php +++ b/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); + } } } } diff --git a/src/Output/QROutputInterface.php b/src/Output/QROutputInterface.php index 72405b816..b07b8e7a5 100644 --- a/src/Output/QROutputInterface.php +++ b/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 ];