From ed6ddf4aa7576062224c7353f8d57640b51103c0 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Wed, 12 Jun 2024 17:10:49 +0200 Subject: [PATCH] Fix discarded alpha channel of watermark in PlaceModifier (#1368) --- src/Drivers/Imagick/Modifiers/PlaceModifier.php | 2 +- tests/Unit/Drivers/Gd/Modifiers/PlaceModifierTest.php | 8 +++++--- .../Unit/Drivers/Imagick/Modifiers/PlaceModifierTest.php | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Drivers/Imagick/Modifiers/PlaceModifier.php b/src/Drivers/Imagick/Modifiers/PlaceModifier.php index aa2c6e86..eb5b7225 100644 --- a/src/Drivers/Imagick/Modifiers/PlaceModifier.php +++ b/src/Drivers/Imagick/Modifiers/PlaceModifier.php @@ -18,7 +18,7 @@ public function apply(ImageInterface $image): ImageInterface // set opacity of watermark if ($this->opacity < 100) { - $watermark->core()->native()->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE); + $watermark->core()->native()->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); $watermark->core()->native()->evaluateImage( Imagick::EVALUATE_DIVIDE, $this->opacity > 0 ? 100 / $this->opacity : 1000, diff --git a/tests/Unit/Drivers/Gd/Modifiers/PlaceModifierTest.php b/tests/Unit/Drivers/Gd/Modifiers/PlaceModifierTest.php index 7fcc1b88..ad8195be 100644 --- a/tests/Unit/Drivers/Gd/Modifiers/PlaceModifierTest.php +++ b/tests/Unit/Drivers/Gd/Modifiers/PlaceModifierTest.php @@ -8,10 +8,11 @@ use PHPUnit\Framework\Attributes\RequiresPhpExtension; use Intervention\Image\Modifiers\PlaceModifier; use Intervention\Image\Tests\GdTestCase; +use Intervention\Image\Drivers\Gd\Modifiers\PlaceModifier as PlaceModifierGd; #[RequiresPhpExtension('gd')] -#[CoversClass(\Intervention\Image\Modifiers\PlaceModifier::class)] -#[CoversClass(\Intervention\Image\Drivers\Gd\Modifiers\PlaceModifier::class)] +#[CoversClass(PlaceModifier::class)] +#[CoversClass(PlaceModifierGd::class)] final class PlaceModifierTest extends GdTestCase { public function testColorChange(): void @@ -27,7 +28,8 @@ public function testColorChangeOpacityPng(): void $image = $this->readTestImage('test.jpg'); $this->assertEquals('febc44', $image->pickColor(300, 25)->toHex()); $image->modify(new PlaceModifier($this->getTestResourcePath('circle.png'), 'top-right', 0, 0, 50)); - $this->assertEquals('987028', $image->pickColor(300, 25)->toHex()); + $this->assertColor(152, 112, 40, 255, $image->pickColor(300, 25), tolerance: 1); + $this->assertColor(255, 202, 107, 255, $image->pickColor(274, 5), tolerance: 1); } public function testColorChangeOpacityJpeg(): void diff --git a/tests/Unit/Drivers/Imagick/Modifiers/PlaceModifierTest.php b/tests/Unit/Drivers/Imagick/Modifiers/PlaceModifierTest.php index d68f015a..5a6c0192 100644 --- a/tests/Unit/Drivers/Imagick/Modifiers/PlaceModifierTest.php +++ b/tests/Unit/Drivers/Imagick/Modifiers/PlaceModifierTest.php @@ -8,10 +8,11 @@ use PHPUnit\Framework\Attributes\RequiresPhpExtension; use Intervention\Image\Modifiers\PlaceModifier; use Intervention\Image\Tests\ImagickTestCase; +use Intervention\Image\Drivers\Imagick\Modifiers\PlaceModifier as PlaceModifierImagick; #[RequiresPhpExtension('imagick')] -#[CoversClass(\Intervention\Image\Modifiers\BlurModifier::class)] -#[CoversClass(\Intervention\Image\Drivers\Imagick\Modifiers\PlaceModifier::class)] +#[CoversClass(PlaceModifier::class)] +#[CoversClass(PlaceModifierImagick::class)] final class PlaceModifierTest extends ImagickTestCase { public function testColorChange(): void @@ -27,7 +28,8 @@ public function testColorChangeOpacityPng(): void $image = $this->readTestImage('test.jpg'); $this->assertEquals('febc44', $image->pickColor(300, 25)->toHex()); $image->modify(new PlaceModifier($this->getTestResourcePath('circle.png'), 'top-right', 0, 0, 50)); - $this->assertEquals('7f5e22', $image->pickColor(300, 25)->toHex()); + $this->assertColor(152, 112, 40, 255, $image->pickColor(300, 25), tolerance: 1); + $this->assertColor(255, 202, 107, 255, $image->pickColor(274, 5), tolerance: 1); } public function testColorChangeOpacityJpeg(): void