From 3a75ac9735b8dc2f2d78be0c4d3efcd42336a96e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20REYNAUD?= Date: Mon, 13 Apr 2026 09:22:37 +0200 Subject: [PATCH] feat: add avif compression parameter --- .env | 1 + serverless.yml | 3 +++ src/Container.php | 7 +++++++ src/Processor/ImageProcessor.php | 4 +++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.env b/.env index f4f6972..8880c3f 100644 --- a/.env +++ b/.env @@ -28,6 +28,7 @@ S3_PATH_STYLE_ENDPOINT=1 # Compression IMAGE_COMPRESSION=75 +AVIF_COMPRESSION=85 # HTTP fetch FETCH_TIMEOUT=10 diff --git a/serverless.yml b/serverless.yml index ae320b5..04224b8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -16,6 +16,7 @@ params: s3_access_key: ${ssm:/cdn-php/prod/s3-access-key} s3_secret_key: ${ssm:/cdn-php/prod/s3-secret-key} image_compression: ${ssm:/cdn-php/prod/image-compression} + avif_compression: ${ssm:/cdn-php/prod/avif-compression} force_token: ${ssm:/cdn-php/prod/force-token} dev: @@ -29,6 +30,7 @@ params: s3_access_key: ${ssm:/cdn-php/dev/s3-access-key} s3_secret_key: ${ssm:/cdn-php/dev/s3-secret-key} image_compression: ${ssm:/cdn-php/dev/image-compression} + avif_compression: ${ssm:/cdn-php/dev/avif-compression} force_token: ${ssm:/cdn-php/dev/force-token} provider: @@ -80,6 +82,7 @@ functions: LOG_STREAM: php://stderr LOG_LEVEL: ${param:log_level} IMAGE_COMPRESSION: ${param:image_compression} + AVIF_COMPRESSION: ${param:avif_compression} package: patterns: diff --git a/src/Container.php b/src/Container.php index 89e3669..5571972 100644 --- a/src/Container.php +++ b/src/Container.php @@ -39,6 +39,7 @@ final class Container private const string KEY_STORAGE_PATH = 'storage_path'; private const string KEY_CACHE_TTL = 'cache_ttl'; private const string KEY_IMAGE_COMPRESSION = 'image_compression'; + private const string KEY_AVIF_COMPRESSION = 'avif_compression'; private const string KEY_FETCH_TIMEOUT = 'fetch_timeout'; private const string KEY_FETCH_MAX_SIZE = 'fetch_max_size'; private const string KEY_FETCH_ALLOW_REDIRECTS = 'fetch_allow_redirects'; @@ -235,6 +236,11 @@ private function bootCache(): void private function bootImageProcessor(): void { $this->add(self::KEY_IMAGE_COMPRESSION, (int) $this->getEnv('IMAGE_COMPRESSION')); + $avifCompressionEnv = $this->getEnv('AVIF_COMPRESSION'); + $this->add( + self::KEY_AVIF_COMPRESSION, + null !== $avifCompressionEnv ? (int) $avifCompressionEnv : $this->get(self::KEY_IMAGE_COMPRESSION), + ); $this->add( ImageProcessor::class, new ImageProcessor( @@ -242,6 +248,7 @@ private function bootImageProcessor(): void $this->get(UrlFilesystemAdapter::class), $this->get(LoggerInterface::class), $this->get(self::KEY_IMAGE_COMPRESSION), + $this->get(self::KEY_AVIF_COMPRESSION), ), ); } diff --git a/src/Processor/ImageProcessor.php b/src/Processor/ImageProcessor.php index c2f07d9..43fb6a1 100644 --- a/src/Processor/ImageProcessor.php +++ b/src/Processor/ImageProcessor.php @@ -28,6 +28,7 @@ public function __construct( private readonly UrlFilesystemAdapter $urlFilesystemAdapter, private readonly LoggerInterface $logger, private readonly int $imageCompression, + private readonly int $avifCompression, ) { } @@ -59,7 +60,8 @@ public function process( ], ); - $glideParams = [...$params->toArray(), 'q' => $this->imageCompression]; + $quality = true === $outputAvif ? $this->avifCompression : $this->imageCompression; + $glideParams = [...$params->toArray(), 'q' => $quality]; if (true === $outputAvif) { $glideParams['fm'] = 'avif';