From 7be06787a3ae44d2ac73a5237f69402c19845232 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Fri, 12 Aug 2022 17:27:59 +0200 Subject: [PATCH] Refactor draw modifiers --- src/Drivers/Abstract/AbstractImage.php | 7 ++--- .../Gd/Modifiers/DrawPixelModifier.php | 19 +++++++----- .../Imagick/Modifiers/DrawPixelModifier.php | 30 +++++++------------ tests/Drivers/Abstract/AbstractImageTest.php | 1 + .../Gd/Modifiers/DrawPixelModifierTest.php | 3 +- .../Modifiers/DrawPixelModifierTest.php | 4 +-- 6 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/Drivers/Abstract/AbstractImage.php b/src/Drivers/Abstract/AbstractImage.php index 9120d5c1..fc2d6aad 100644 --- a/src/Drivers/Abstract/AbstractImage.php +++ b/src/Drivers/Abstract/AbstractImage.php @@ -217,10 +217,9 @@ abstract class AbstractImage implements ImageInterface public function drawPixel(int $x, int $y, $color = null): ImageInterface { - $color = $this->handleInput($color); - $modifier = $this->resolveDriverClass('Modifiers\DrawPixelModifier', new Point($x, $y), $color); - - return $this->modify($modifier); + return $this->modify( + $this->resolveDriverClass('Modifiers\DrawPixelModifier', new Point($x, $y), $color) + ); } public function drawRectangle(int $x, int $y, ?callable $init = null): ImageInterface diff --git a/src/Drivers/Gd/Modifiers/DrawPixelModifier.php b/src/Drivers/Gd/Modifiers/DrawPixelModifier.php index 3f44a23b..bab24579 100644 --- a/src/Drivers/Gd/Modifiers/DrawPixelModifier.php +++ b/src/Drivers/Gd/Modifiers/DrawPixelModifier.php @@ -3,28 +3,31 @@ namespace Intervention\Image\Drivers\Gd\Modifiers; use Intervention\Image\Geometry\Point; -use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ModifierInterface; +use Intervention\Image\Traits\CanHandleInput; class DrawPixelModifier implements ModifierInterface { - public function __construct(protected Point $position, protected ColorInterface $color) - { + use CanHandleInput; + + public function __construct( + protected Point $position, + protected $color + ) { // } public function apply(ImageInterface $image): ImageInterface { - foreach ($image as $frame) { + $color = $this->handleInput($this->color); + return $image->eachFrame(function ($frame) use ($color) { imagesetpixel( $frame->getCore(), $this->position->getX(), $this->position->getY(), - $this->color->toInt() + $color->toInt() ); - } - - return $image; + }); } } diff --git a/src/Drivers/Imagick/Modifiers/DrawPixelModifier.php b/src/Drivers/Imagick/Modifiers/DrawPixelModifier.php index 00f34ba4..1b5edc9d 100644 --- a/src/Drivers/Imagick/Modifiers/DrawPixelModifier.php +++ b/src/Drivers/Imagick/Modifiers/DrawPixelModifier.php @@ -3,39 +3,31 @@ namespace Intervention\Image\Drivers\Imagick\Modifiers; use ImagickDraw; -use Intervention\Image\Drivers\Imagick\Color; -use Intervention\Image\Exceptions\DecoderException; use Intervention\Image\Geometry\Point; -use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ModifierInterface; +use Intervention\Image\Traits\CanHandleInput; class DrawPixelModifier implements ModifierInterface { - public function __construct(protected Point $position, protected ColorInterface $color) - { + use CanHandleInput; + + public function __construct( + protected Point $position, + protected $color + ) { // } public function apply(ImageInterface $image): ImageInterface { + $color = $this->handleInput($this->color); $pixel = new ImagickDraw(); - $pixel->setFillColor($this->getColor()->getPixel()); + $pixel->setFillColor($color->getPixel()); $pixel->point($this->position->getX(), $this->position->getY()); - foreach ($image as $frame) { + return $image->eachFrame(function ($frame) use ($pixel) { $frame->getCore()->drawImage($pixel); - } - - return $image; - } - - public function getColor(): Color - { - if (!is_a($this->color, Color::class)) { - throw new DecoderException('Unable to decode given pixel color.'); - } - - return $this->color; + }); } } diff --git a/tests/Drivers/Abstract/AbstractImageTest.php b/tests/Drivers/Abstract/AbstractImageTest.php index b6546ccb..9b5a943c 100644 --- a/tests/Drivers/Abstract/AbstractImageTest.php +++ b/tests/Drivers/Abstract/AbstractImageTest.php @@ -11,6 +11,7 @@ use Intervention\Image\Interfaces\EncoderInterface; use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ModifierInterface; +use Intervention\Image\Interfaces\PointInterface; use Intervention\Image\Tests\TestCase; use Mockery; diff --git a/tests/Drivers/Gd/Modifiers/DrawPixelModifierTest.php b/tests/Drivers/Gd/Modifiers/DrawPixelModifierTest.php index 0b552116..e6ef8f5d 100644 --- a/tests/Drivers/Gd/Modifiers/DrawPixelModifierTest.php +++ b/tests/Drivers/Gd/Modifiers/DrawPixelModifierTest.php @@ -2,7 +2,6 @@ namespace Intervention\Image\Tests\Drivers\Gd\Modifiers; -use Intervention\Image\Drivers\Gd\Color; use Intervention\Image\Drivers\Gd\Modifiers\DrawPixelModifier; use Intervention\Image\Geometry\Point; use Intervention\Image\Tests\TestCase; @@ -20,7 +19,7 @@ class DrawPixelModifierTest extends TestCase { $image = $this->createTestImage('trim.png'); $this->assertEquals('00aef0', $image->pickColor(14, 14)->toHex()); - $image->modify(new DrawPixelModifier(new Point(14, 14), new Color(16777215))); + $image->modify(new DrawPixelModifier(new Point(14, 14), 'ffffff')); $this->assertEquals('ffffff', $image->pickColor(14, 14)->toHex()); } } diff --git a/tests/Drivers/Imagick/Modifiers/DrawPixelModifierTest.php b/tests/Drivers/Imagick/Modifiers/DrawPixelModifierTest.php index c0f3cf54..90c076d7 100644 --- a/tests/Drivers/Imagick/Modifiers/DrawPixelModifierTest.php +++ b/tests/Drivers/Imagick/Modifiers/DrawPixelModifierTest.php @@ -2,8 +2,6 @@ namespace Intervention\Image\Tests\Drivers\Imagick\Modifiers; -use ImagickPixel; -use Intervention\Image\Drivers\Imagick\Color; use Intervention\Image\Drivers\Imagick\Modifiers\DrawPixelModifier; use Intervention\Image\Geometry\Point; use Intervention\Image\Tests\TestCase; @@ -21,7 +19,7 @@ class DrawPixelModifierTest extends TestCase { $image = $this->createTestImage('trim.png'); $this->assertEquals('00aef0', $image->pickColor(14, 14)->toHex()); - $image->modify(new DrawPixelModifier(new Point(14, 14), new Color(new ImagickPixel('#ffffff')))); + $image->modify(new DrawPixelModifier(new Point(14, 14), 'ffffff')); $this->assertEquals('ffffff', $image->pickColor(14, 14)->toHex()); } }