From fd287872e087eb89709da073a94f4c869ce77f38 Mon Sep 17 00:00:00 2001 From: Gijsdev <38570931+gijsdev@users.noreply.github.com> Date: Tue, 12 Oct 2021 20:32:24 +0200 Subject: [PATCH] Add support for AVIF --- composer.json | 2 +- docs/2.0/api/encode.md | 2 +- src/Manipulators/Encode.php | 1 + tests/Manipulators/EncodeTest.php | 29 +++++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 7ff46e5f..1fa56991 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ ], "require": { "php": "^7.2|^8.0", - "intervention/image": "^2.4", + "intervention/image": "^2.7", "league/flysystem": "^2.0", "psr/http-message": "^1.0" }, diff --git a/docs/2.0/api/encode.md b/docs/2.0/api/encode.md index dbda2b40..44d115d8 100644 --- a/docs/2.0/api/encode.md +++ b/docs/2.0/api/encode.md @@ -18,7 +18,7 @@ Defines the quality of the image. Use values between `0` and `100`. Defaults to ## Format `fm` -Encodes the image to a specific format. Accepts `jpg`, `pjpg` (progressive jpeg), `png`, `gif` or `webp`. Defaults to `jpg`. +Encodes the image to a specific format. Accepts `jpg`, `pjpg` (progressive jpeg), `png`, `gif`, `webp` or `avif`. Defaults to `jpg`. ~~~ html diff --git a/src/Manipulators/Encode.php b/src/Manipulators/Encode.php index ac465de4..87294731 100644 --- a/src/Manipulators/Encode.php +++ b/src/Manipulators/Encode.php @@ -46,6 +46,7 @@ public function run(Image $image) public function getFormat(Image $image) { $allowed = [ + 'avif' => 'image/avif', 'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'pjpg' => 'image/jpeg', diff --git a/tests/Manipulators/EncodeTest.php b/tests/Manipulators/EncodeTest.php index 0e9b26f9..9020a2be 100644 --- a/tests/Manipulators/EncodeTest.php +++ b/tests/Manipulators/EncodeTest.php @@ -14,6 +14,7 @@ class EncodeTest extends TestCase private $gif; private $tif; private $webp; + private $avif; public function setUp(): void { @@ -26,6 +27,10 @@ public function setUp(): void $this->webp = $manager->canvas(100, 100)->encode('webp'); } + if (function_exists('imagecreatefromavif')) { + $this->avif = $manager->canvas(100, 100)->encode('avif'); + } + $this->manipulator = new Encode(); } @@ -64,6 +69,22 @@ public function testRun() $this->assertSame('image/webp', $this->manipulator->setParams(['fm' => 'webp'])->run($this->gif)->mime); $this->assertSame('image/webp', $this->manipulator->setParams(['fm' => 'webp'])->run($this->webp)->mime); } + + if (function_exists('imagecreatefromavif')) { + $this->assertSame('image/jpeg', $this->manipulator->setParams(['fm' => 'jpg'])->run($this->avif)->mime); + $this->assertSame('image/jpeg', $this->manipulator->setParams(['fm' => 'pjpg'])->run($this->avif)->mime); + $this->assertSame('image/png', $this->manipulator->setParams(['fm' => 'png'])->run($this->avif)->mime); + $this->assertSame('image/gif', $this->manipulator->setParams(['fm' => 'gif'])->run($this->avif)->mime); + $this->assertSame('image/avif', $this->manipulator->setParams(['fm' => 'avif'])->run($this->jpg)->mime); + $this->assertSame('image/avif', $this->manipulator->setParams(['fm' => 'avif'])->run($this->png)->mime); + $this->assertSame('image/avif', $this->manipulator->setParams(['fm' => 'avif'])->run($this->gif)->mime); + $this->assertSame('image/avif', $this->manipulator->setParams(['fm' => 'avif'])->run($this->avif)->mime); + } + + if (function_exists('imagecreatefromwebp') && function_exists('imagecreatefromavif')) { + $this->assertSame('image/webp', $this->manipulator->setParams(['fm' => 'webp'])->run($this->avif)->mime); + $this->assertSame('image/avif', $this->manipulator->setParams(['fm' => 'avif'])->run($this->webp)->mime); + } } public function testGetFormat() @@ -78,6 +99,10 @@ public function testGetFormat() if (function_exists('imagecreatefromwebp')) { $mock->shouldReceive('mime')->andReturn('image/webp')->once(); } + + if (function_exists('imagecreatefromavif')) { + $mock->shouldReceive('mime')->andReturn('image/avif')->once(); + } }); $this->assertSame('jpg', $this->manipulator->setParams(['fm' => 'jpg'])->getFormat($image)); @@ -93,6 +118,10 @@ public function testGetFormat() if (function_exists('imagecreatefromwebp')) { $this->assertSame('webp', $this->manipulator->setParams(['fm' => null])->getFormat($image)); } + + if (function_exists('imagecreatefromavif')) { + $this->assertSame('avif', $this->manipulator->setParams(['fm' => null])->getFormat($image)); + } } public function testGetQuality()