From 2cc7bee52f0c10af043a5bdfab9ede8eadab3fbb Mon Sep 17 00:00:00 2001 From: Sergey Golubev Date: Mon, 20 Mar 2023 16:20:15 +0100 Subject: [PATCH] Enable `timeout` adjustment for the `OptimizerChain` --- src/Image.php | 10 ++++++++-- tests/Manipulations/OptimizeTest.php | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Image.php b/src/Image.php index 891889b..2587c5b 100644 --- a/src/Image.php +++ b/src/Image.php @@ -140,8 +140,10 @@ protected function performOptimization($path, array $optimizerChainConfiguration $optimizerChain = $this->optimizerChain ?? OptimizerChainFactory::create(); if (count($optimizerChainConfiguration)) { + $optimizersOptions = isset($optimizerChainConfiguration['optimizers']) + ? $optimizerChainConfiguration['optimizers'] + : $optimizerChainConfiguration; $existingOptimizers = $optimizerChain->getOptimizers(); - $optimizers = array_map(function (array $optimizerOptions, string $optimizerClassName) use ($existingOptimizers) { $optimizer = array_values(array_filter($existingOptimizers, function ($optimizer) use ($optimizerClassName) { return $optimizer::class === $optimizerClassName; @@ -150,9 +152,13 @@ protected function performOptimization($path, array $optimizerChainConfiguration $optimizer = isset($optimizer[0]) && $optimizer[0] instanceof BaseOptimizer ? $optimizer[0] : new $optimizerClassName(); return $optimizer->setOptions($optimizerOptions)->setBinaryPath($optimizer->binaryPath); - }, $optimizerChainConfiguration, array_keys($optimizerChainConfiguration)); + }, $optimizersOptions, array_keys($optimizersOptions)); $optimizerChain->setOptimizers($optimizers); + + if (isset($optimizerChainConfiguration['timeout'])) { + $optimizerChain->setTimeout($optimizerChainConfiguration['timeout']); + } } $optimizerChain->optimize($path); diff --git a/tests/Manipulations/OptimizeTest.php b/tests/Manipulations/OptimizeTest.php index 54aa476..15cf367 100644 --- a/tests/Manipulations/OptimizeTest.php +++ b/tests/Manipulations/OptimizeTest.php @@ -57,3 +57,21 @@ expect($targetFile)->toBeFile(); }); + +it('can optimize an image specifying a desired timeout', function () { + $targetFile = $this->tempDir->path('optimized.jpg'); + + Image::load(getTestFile('test.jpg')) + ->setOptimizeChain(OptimizerChainFactory::create()) + ->optimize([ + 'timeout' => 120, + 'optimizers' => [ + Jpegoptim::class => [ + '--all-progressive', + ], + ], + ]) + ->save($targetFile); + + expect($targetFile)->toBeFile(); +});