Skip to content

Commit

Permalink
Enable timeout adjustment for the OptimizerChain
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Golubev committed Mar 20, 2023
1 parent 5c8fd77 commit 2cc7bee
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/Image.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
18 changes: 18 additions & 0 deletions tests/Manipulations/OptimizeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
});

0 comments on commit 2cc7bee

Please sign in to comment.