diff --git a/src/Drivers/Gd/Decoders/NativeObjectDecoder.php b/src/Drivers/Gd/Decoders/NativeObjectDecoder.php index 740e58e7..78ea021e 100644 --- a/src/Drivers/Gd/Decoders/NativeObjectDecoder.php +++ b/src/Drivers/Gd/Decoders/NativeObjectDecoder.php @@ -4,6 +4,7 @@ namespace Intervention\Image\Drivers\Gd\Decoders; +use Exception; use GdImage; use Intervention\Gif\Decoder as GifDecoder; use Intervention\Gif\Splitter as GifSplitter; @@ -76,23 +77,27 @@ protected function decodeGif(mixed $input): ImageInterface return $image; } - // create empty core - $core = new Core(); + try { + // create empty core + $core = new Core(); - $gif = GifDecoder::decode($input); - $splitter = GifSplitter::create($gif)->split(); - $delays = $splitter->getDelays(); + $gif = GifDecoder::decode($input); + $splitter = GifSplitter::create($gif)->split(); + $delays = $splitter->getDelays(); - // set loops on core - if ($loops = $gif->getMainApplicationExtension()?->getLoops()) { - $core->setLoops($loops); - } + // set loops on core + if ($loops = $gif->getMainApplicationExtension()?->getLoops()) { + $core->setLoops($loops); + } - // add GDImage instances to core - foreach ($splitter->coalesceToResources() as $key => $native) { - $core->push( - new Frame($native, $delays[$key] / 100) - ); + // add GDImage instances to core + foreach ($splitter->coalesceToResources() as $key => $native) { + $core->push( + new Frame($native, $delays[$key] / 100) + ); + } + } catch (Exception $e) { + throw new DecoderException($e->getMessage(), $e->getCode(), $e); } // create (possibly) animated image diff --git a/src/Drivers/Gd/Encoders/GifEncoder.php b/src/Drivers/Gd/Encoders/GifEncoder.php index 72d79260..610e17ef 100644 --- a/src/Drivers/Gd/Encoders/GifEncoder.php +++ b/src/Drivers/Gd/Encoders/GifEncoder.php @@ -40,25 +40,25 @@ public function encode(ImageInterface $image): EncodedImage */ protected function encodeAnimated(ImageInterface $image): EncodedImage { - $builder = GifBuilder::canvas( - $image->width(), - $image->height() - ); - - foreach ($image as $frame) { - $builder->addFrame( - source: $this->encode($frame->toImage($image->driver()))->toFilePointer(), - delay: $frame->delay(), - interlaced: $this->interlaced + try { + $builder = GifBuilder::canvas( + $image->width(), + $image->height() ); - } - try { + foreach ($image as $frame) { + $builder->addFrame( + source: $this->encode($frame->toImage($image->driver()))->toFilePointer(), + delay: $frame->delay(), + interlaced: $this->interlaced + ); + } + $builder->setLoops($image->loops()); + + return new EncodedImage($builder->encode()); } catch (Exception $e) { throw new EncoderException($e->getMessage(), $e->getCode(), $e); } - - return new EncodedImage($builder->encode()); } }