diff --git a/src/OptimizerChainFactory.php b/src/OptimizerChainFactory.php index 6315501..fe34bba 100644 --- a/src/OptimizerChainFactory.php +++ b/src/OptimizerChainFactory.php @@ -75,14 +75,14 @@ private static function getOptimizers(array $config): array private static function configHasOptimizer(array $config): bool { - return (bool)array_diff_key($config, [ - Jpegoptim::class, - Pngquant::class, - Optipng::class, - Svgo::class, - Gifsicle::class, - Cwebp::class, - Avifenc::class, + return (bool)array_intersect_key($config, [ + Jpegoptim::class => null, + Pngquant::class => null, + Optipng::class => null, + Svgo::class => null, + Gifsicle::class => null, + Cwebp::class => null, + Avifenc::class => null, ]); } } diff --git a/tests/OptimizerChainFactoryTest.php b/tests/OptimizerChainFactoryTest.php index 9dade53..d816b33 100644 --- a/tests/OptimizerChainFactoryTest.php +++ b/tests/OptimizerChainFactoryTest.php @@ -64,6 +64,53 @@ function (Optimizer $optimizer) { ); }); +it('can use quality parameter with default config', function () { + $this->optimizerChain = OptimizerChainFactory::create(['quality' => 50]) + ->useLogger($this->log); + + assertEquals( + [ + new Jpegoptim([ + '-m50', + '--force', + '--strip-all', + '--all-progressive', + ]), + new Pngquant([ + '--quality=50', + '--force', + ]), + new Optipng([ + '-i0', + '-o2', + '-quiet', + ]), + new Svgo([]), + new Gifsicle([ + '-b', + '-O3', + ]), + new Cwebp([ + '-m 6', + '-pass 10', + '-mt', + '-q 50', + ]), + new Avifenc([ + '-a cq-level=32', + '-j all', + '--min 0', + '--max 63', + '--minalpha 0', + '--maxalpha 63', + '-a end-usage=q', + '-a tune=ssim', + ]), + ], + $this->optimizerChain->getOptimizers() + ); +}); + it('can optimize a jpg', function () { $tempFilePath = getTempFilePath('image.jpg');