1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-21 13:11:18 +02:00

Fix bug in Imagick PadModifier

This commit is contained in:
Oliver Vogel
2023-11-05 10:55:43 +01:00
parent 61e5e93af9
commit a81710e866

View File

@@ -4,6 +4,8 @@ namespace Intervention\Image\Drivers\Imagick\Modifiers;
use Imagick; use Imagick;
use ImagickDraw; use ImagickDraw;
use ImagickPixel;
use Intervention\Image\Drivers\Imagick\Image;
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractPadModifier; use Intervention\Image\Drivers\Abstract\Modifiers\AbstractPadModifier;
use Intervention\Image\Colors\Rgb\Color; use Intervention\Image\Colors\Rgb\Color;
use Intervention\Image\Drivers\Imagick\Traits\CanHandleColors; use Intervention\Image\Drivers\Imagick\Traits\CanHandleColors;
@@ -21,10 +23,13 @@ class PadModifier extends AbstractPadModifier implements ModifierInterface
public function apply(ImageInterface $image): ImageInterface public function apply(ImageInterface $image): ImageInterface
{ {
$image = $this->failIfNotClass($image, Image::class);
$resize = $this->getResizeSize($image); $resize = $this->getResizeSize($image);
$crop = $this->getCropSize($image); $crop = $this->getCropSize($image);
$background = $this->handleInput($this->background); $background = $this->handleInput($this->background);
$imagick = new Imagick();
foreach ($image as $frame) { foreach ($image as $frame) {
// resize current core // resize current core
$frame->core()->scaleImage( $frame->core()->scaleImage(
@@ -43,12 +48,10 @@ class PadModifier extends AbstractPadModifier implements ModifierInterface
$crop->pivot()->y() $crop->pivot()->y()
); );
// replace core $imagick->addImage($canvas);
$frame->core()->destroy();
$frame->setCore($canvas);
} }
return $image; return $image->setImagick($imagick);
} }
protected function buildBaseCanvas(SizeInterface $crop, SizeInterface $resize, Color $background): Imagick protected function buildBaseCanvas(SizeInterface $crop, SizeInterface $resize, Color $background): Imagick
@@ -56,20 +59,15 @@ class PadModifier extends AbstractPadModifier implements ModifierInterface
// build base canvas in target size // build base canvas in target size
$canvas = $this->imageFactory()->newCore( $canvas = $this->imageFactory()->newCore(
$resize->width(), $resize->width(),
$resize->height() $resize->height(),
$background
); );
// draw background color on canvas
$draw = new ImagickDraw();
$draw->setFillColor($this->colorToPixel($background, $canvas->getColorspace()));
$draw->rectangle(0, 0, $canvas->getImageWidth(), $canvas->getImageHeight());
$canvas->drawImage($draw);
// make area where image is placed transparent to keep // make area where image is placed transparent to keep
// transparency even if background-color is set // transparency even if background-color is set
$draw = new ImagickDraw(); $draw = new ImagickDraw();
$fill = $background->toHex('#') == '#ff0000' ? '#00ff00' : '#ff0000'; $fill = $background->toHex('#') == '#ff0000' ? '#00ff00' : '#ff0000';
$draw->setFillColor($fill); $draw->setFillColor(new ImagickPixel($fill));
$draw->rectangle( $draw->rectangle(
$crop->pivot()->x(), $crop->pivot()->x(),
$crop->pivot()->y(), $crop->pivot()->y(),