From d40fdd1aeb62acbc1719cb07e19073c0cbf715d7 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Fri, 10 Jan 2025 17:57:31 +0100 Subject: [PATCH] Re-apply animation details --- src/Drivers/Imagick/Modifiers/CropModifier.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Drivers/Imagick/Modifiers/CropModifier.php b/src/Drivers/Imagick/Modifiers/CropModifier.php index a6744f12..e5e1421c 100644 --- a/src/Drivers/Imagick/Modifiers/CropModifier.php +++ b/src/Drivers/Imagick/Modifiers/CropModifier.php @@ -18,14 +18,24 @@ public function apply(ImageInterface $image): ImageInterface $this->driver()->handleInput($this->background) ); + // create empty container imagick to rebuild core $imagick = new Imagick(); $resolution = $image->resolution()->perInch(); foreach ($image as $frame) { + // create new frame canvas with modifiers background $canvas = new Imagick(); $canvas->newImage($crop->width(), $crop->height(), $background, 'png'); $canvas->setImageResolution($resolution->x(), $resolution->y()); + // set animation details + if ($image->isAnimated()) { + $canvas->setImageDelay($frame->native()->getImageDelay()); + $canvas->setImageIterations($frame->native()->getImageIterations()); + $canvas->setImageDispose($frame->native()->getImageDispose()); + } + + // place original frame content onto the empty colored frame canvas $canvas->compositeImage( $frame->native(), Imagick::COMPOSITE_OVER, @@ -33,6 +43,7 @@ public function apply(ImageInterface $image): ImageInterface ($crop->pivot()->y() + $this->offset_y) * -1, ); + // copy alpha channel if available if ($frame->native()->getImageAlphaChannel()) { $canvas->compositeImage( $frame->native(), @@ -42,9 +53,11 @@ public function apply(ImageInterface $image): ImageInterface ); } + // add newly built frame to container imagick $imagick->addImage($canvas); } + // replace imagick $image->core()->setNative($imagick); return $image;