diff --git a/src/Intervention/Image/Imagick/Commands/FillCommand.php b/src/Intervention/Image/Imagick/Commands/FillCommand.php index 915b0ad2..d36d456a 100644 --- a/src/Intervention/Image/Imagick/Commands/FillCommand.php +++ b/src/Intervention/Image/Imagick/Commands/FillCommand.php @@ -64,9 +64,15 @@ class FillCommand extends \Intervention\Image\Commands\AbstractCommand // mask away color at pos. $tile->paintTransparentImage($tile->getImagePixelColor($x, $y), 0, 0); + // save alpha channel of original image + $alpha = clone $image->getCore(); + // merge original with canvas and tile $image->getCore()->compositeImage($canvas, \Imagick::COMPOSITE_DEFAULT, 0, 0); $image->getCore()->compositeImage($tile, \Imagick::COMPOSITE_DEFAULT, 0, 0); + + // restore alpha channel of original image + $image->getCore()->compositeImage($alpha, \Imagick::COMPOSITE_COPYOPACITY, 0, 0); } } else { diff --git a/tests/FillCommandTest.php b/tests/FillCommandTest.php index 97ba8903..aa378769 100644 --- a/tests/FillCommandTest.php +++ b/tests/FillCommandTest.php @@ -56,7 +56,7 @@ class FillCommandTest extends PHPUnit_Framework_TestCase $imagick = Mockery::mock('Imagick'); $imagick->shouldReceive('getimagepixelcolor')->once()->andReturn('#000000'); $imagick->shouldReceive('painttransparentimage')->once()->andReturn(true); - $imagick->shouldReceive('compositeimage')->times(2)->andReturn(true); + $imagick->shouldReceive('compositeimage')->times(3)->andReturn(true); $image = Mockery::mock('Intervention\Image\Image'); $image->shouldReceive('getCore')->andReturn($imagick); $image->shouldReceive('getWidth')->andReturn(800);