From 0e8c60cccef1f10dae04f1819851de5d5ac0107b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20M=C3=A1tyus?= Date: Thu, 19 Feb 2015 22:26:04 +0100 Subject: [PATCH] Image::place() fixed unexpected output with transparency image #56 --- src/Utils/Image.php | 12 +++++++++++- tests/Utils/Image.alpha1.phpt | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Utils/Image.php b/src/Utils/Image.php index 3d3a29057..9c64a6a6b 100644 --- a/src/Utils/Image.php +++ b/src/Utils/Image.php @@ -487,8 +487,18 @@ public function place(Image $image, $left = 0, $top = 0, $opacity = 100) ); } elseif ($opacity <> 0) { + $cutting = imagecreatetruecolor($image->getWidth(), $image->getHeight()); + imagecopy( + $cutting, $this->image, + 0, 0, $left, $top, $image->getWidth(), $image->getHeight() + ); + imagecopy( + $cutting, $image->getImageResource(), + 0, 0, 0, 0, $image->getWidth(), $image->getHeight() + ); + imagecopymerge( - $this->image, $image->getImageResource(), + $this->image, $cutting, $left, $top, 0, 0, $image->getWidth(), $image->getHeight(), $opacity ); diff --git a/tests/Utils/Image.alpha1.phpt b/tests/Utils/Image.alpha1.phpt index c96898764..cd114f91e 100644 --- a/tests/Utils/Image.alpha1.phpt +++ b/tests/Utils/Image.alpha1.phpt @@ -16,6 +16,17 @@ if (!extension_loaded('gd')) { } +$rectangle = Image::fromBlank(100, 100, Image::rgb(255, 255, 255, 127)); +$rectangle->filledRectangle(25, 25, 74, 74, Image::rgb(255, 0, 0, 63)); + +$image = Image::fromBlank(200, 100, Image::rgb(0, 255, 0)); +$image->place($rectangle, 50, 0, 63); + +$image2 = Image::fromBlank(200, 100, Image::rgb(0, 255, 0)); +$image2->place(Image::fromBlank(50, 50, Image::rgb(80, 173, 0)), 75, 25); + +Assert::same($image2->toString(Image::PNG, 0), $image->toString(Image::PNG, 0)); + ob_start(); $image = Image::fromBlank(200, 100, Image::rgb(255, 128, 0, 60));