diff --git a/composer.json b/composer.json index e97407e9..db385d54 100644 --- a/composer.json +++ b/composer.json @@ -13,8 +13,7 @@ ], "require": { "php": "^8.1", - "intervention/gif": "^3.0", - "intervention/mimesniffer": "^0.5" + "intervention/gif": "^3.0" }, "require-dev": { "phpunit/phpunit": "^9", diff --git a/src/Drivers/Abstract/Decoders/AbstractDecoder.php b/src/Drivers/Abstract/Decoders/AbstractDecoder.php index a7c6df54..27730f9c 100644 --- a/src/Drivers/Abstract/Decoders/AbstractDecoder.php +++ b/src/Drivers/Abstract/Decoders/AbstractDecoder.php @@ -8,8 +8,6 @@ use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\DecoderInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Traits\CanBuildFilePointer; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\AbstractType; abstract class AbstractDecoder implements DecoderInterface { @@ -40,9 +38,19 @@ abstract class AbstractDecoder implements DecoderInterface return $this->successor !== null; } - protected function inputType($input): AbstractType + /** + * Return media type (MIME) of given input + * + * @param string $input + * @return string + */ + protected function mediaType(string $input): string { - return MimeSniffer::createFromString($input)->getType(); + $pointer = $this->buildFilePointer($input); + $type = mime_content_type($pointer); + fclose($pointer); + + return $type; } protected function decodeExifData(string $image_data): array diff --git a/src/Drivers/Gd/Decoders/BinaryImageDecoder.php b/src/Drivers/Gd/Decoders/BinaryImageDecoder.php index 8575edd8..5fe4bf5b 100644 --- a/src/Drivers/Gd/Decoders/BinaryImageDecoder.php +++ b/src/Drivers/Gd/Decoders/BinaryImageDecoder.php @@ -10,7 +10,6 @@ use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\DecoderInterface; use Intervention\Image\Interfaces\ImageInterface; -use Intervention\MimeSniffer\Types\ImageGif; use Intervention\Gif\Decoder as GifDecoder; use Intervention\Gif\Splitter as GifSplitter; use Intervention\Image\Exceptions\DecoderException; @@ -23,11 +22,7 @@ class BinaryImageDecoder extends AbstractDecoder implements DecoderInterface throw new DecoderException('Unable to decode input'); } - if (!$this->inputType($input)->isBinary()) { - throw new DecoderException('Unable to decode input'); - } - - if (is_a($this->inputType($input), ImageGif::class)) { + if ($this->mediaType($input) == 'image/gif') { return $this->decodeGif($input); // decode (animated) gif } diff --git a/src/Drivers/Imagick/Decoders/BinaryImageDecoder.php b/src/Drivers/Imagick/Decoders/BinaryImageDecoder.php index 217b15ef..f8b7349a 100644 --- a/src/Drivers/Imagick/Decoders/BinaryImageDecoder.php +++ b/src/Drivers/Imagick/Decoders/BinaryImageDecoder.php @@ -3,6 +3,7 @@ namespace Intervention\Image\Drivers\Imagick\Decoders; use Imagick; +use ImagickException; use Intervention\Image\Drivers\Abstract\Decoders\AbstractDecoder; use Intervention\Image\Drivers\Imagick\Image; use Intervention\Image\Exceptions\DecoderException; @@ -18,12 +19,13 @@ class BinaryImageDecoder extends AbstractDecoder implements DecoderInterface throw new DecoderException('Unable to decode input'); } - if (!$this->inputType($input)->isBinary()) { + try { + $imagick = new Imagick(); + $imagick->readImageBlob($input); + } catch (ImagickException $e) { throw new DecoderException('Unable to decode input'); } - $imagick = new Imagick(); - $imagick->readImageBlob($input); $imagick = $imagick->coalesceImages(); // fix image orientation diff --git a/tests/Drivers/Gd/Encoders/AvifEncoderTest.php b/tests/Drivers/Gd/Encoders/AvifEncoderTest.php index b2d1fa0d..73beb26c 100644 --- a/tests/Drivers/Gd/Encoders/AvifEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/AvifEncoderTest.php @@ -7,8 +7,6 @@ use Intervention\Image\Drivers\Gd\Encoders\AvifEncoder; use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Tests\TestCase; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageAvif; /** * @requires extension gd @@ -28,6 +26,6 @@ class AvifEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new AvifEncoder(10); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageAvif())); + $this->assertMimeType('image/avif', (string) $result); } } diff --git a/tests/Drivers/Gd/Encoders/BmpEncoderTest.php b/tests/Drivers/Gd/Encoders/BmpEncoderTest.php index 8cd4bcf9..a26b63e7 100644 --- a/tests/Drivers/Gd/Encoders/BmpEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/BmpEncoderTest.php @@ -7,8 +7,6 @@ use Intervention\Image\Drivers\Gd\Encoders\BmpEncoder; use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Tests\TestCase; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageBmp; /** * @requires extension gd @@ -28,6 +26,6 @@ class BmpEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new BmpEncoder(); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(ImageBmp::class)); + $this->assertMimeType(['image/bmp', 'image/x-ms-bmp'], (string) $result); } } diff --git a/tests/Drivers/Gd/Encoders/GifEncoderTest.php b/tests/Drivers/Gd/Encoders/GifEncoderTest.php index 3408c061..f95b7d3d 100644 --- a/tests/Drivers/Gd/Encoders/GifEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/GifEncoderTest.php @@ -8,8 +8,6 @@ use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Tests\TestCase; use Intervention\Image\Tests\Traits\CanCreateGdTestImage; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageGif; /** * @requires extension gd @@ -42,7 +40,7 @@ class GifEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new GifEncoder(); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageGif())); + $this->assertMimeType('image/gif', (string) $result); } public function testEncodeReduced(): void diff --git a/tests/Drivers/Gd/Encoders/JpegEncoderTest.php b/tests/Drivers/Gd/Encoders/JpegEncoderTest.php index bb016d28..3237a6ba 100644 --- a/tests/Drivers/Gd/Encoders/JpegEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/JpegEncoderTest.php @@ -7,8 +7,6 @@ use Intervention\Image\Drivers\Gd\Encoders\JpegEncoder; use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Tests\TestCase; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageJpeg; /** * @requires extension gd @@ -28,6 +26,6 @@ class JpegEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new JpegEncoder(75); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageJpeg())); + $this->assertMimeType('image/jpeg', (string) $result); } } diff --git a/tests/Drivers/Gd/Encoders/PngEncoderTest.php b/tests/Drivers/Gd/Encoders/PngEncoderTest.php index 8f0e99fd..fc4b043d 100644 --- a/tests/Drivers/Gd/Encoders/PngEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/PngEncoderTest.php @@ -8,8 +8,6 @@ use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; use Intervention\Image\Tests\TestCase; use Intervention\Image\Tests\Traits\CanCreateGdTestImage; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImagePng; /** * @requires extension gd @@ -31,7 +29,7 @@ class PngEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new PngEncoder(); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(ImagePng::class)); + $this->assertMimeType('image/png', (string) $result); } public function testEncodeReduced(): void diff --git a/tests/Drivers/Gd/Encoders/WebpEncoderTest.php b/tests/Drivers/Gd/Encoders/WebpEncoderTest.php index 994395bd..3da60498 100644 --- a/tests/Drivers/Gd/Encoders/WebpEncoderTest.php +++ b/tests/Drivers/Gd/Encoders/WebpEncoderTest.php @@ -8,9 +8,7 @@ use Intervention\Image\Collection; use Intervention\Image\Drivers\Gd\Encoders\WebpEncoder; use Intervention\Image\Drivers\Gd\Frame; use Intervention\Image\Drivers\Gd\Image; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageWebp; -use PHPUnit\Framework\TestCase; +use Intervention\Image\Tests\TestCase; /** * @requires extension gd @@ -29,6 +27,6 @@ final class WebpEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new WebpEncoder(75); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString((string) $result)->matches(new ImageWebp())); + $this->assertMimeType('image/webp', (string) $result); } } diff --git a/tests/Drivers/Imagick/Encoders/AvifEncoderTest.php b/tests/Drivers/Imagick/Encoders/AvifEncoderTest.php index 8f220672..b7af92f1 100644 --- a/tests/Drivers/Imagick/Encoders/AvifEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/AvifEncoderTest.php @@ -7,8 +7,6 @@ use ImagickPixel; use Intervention\Image\Drivers\Imagick\Encoders\AvifEncoder; use Intervention\Image\Drivers\Imagick\Image; use Intervention\Image\Tests\TestCase; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageAvif; /** * @requires extension imagick @@ -29,6 +27,6 @@ class AvifEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new AvifEncoder(10); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageAvif())); + $this->assertMimeType('image/avif', (string) $result); } } diff --git a/tests/Drivers/Imagick/Encoders/BmpEncoderTest.php b/tests/Drivers/Imagick/Encoders/BmpEncoderTest.php index beb20678..5b650f5a 100644 --- a/tests/Drivers/Imagick/Encoders/BmpEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/BmpEncoderTest.php @@ -8,8 +8,6 @@ use Intervention\Image\Drivers\Imagick\Encoders\BmpEncoder; use Intervention\Image\Drivers\Imagick\Image; use Intervention\Image\Tests\TestCase; use Intervention\Image\Tests\Traits\CanCreateImagickTestImage; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageBmp; /** * @requires extension imagick @@ -32,9 +30,7 @@ class BmpEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new BmpEncoder(); $result = $encoder->encode($image); - $this->assertTrue( - MimeSniffer::createFromString($result)->matches(new ImageBmp()) - ); + $this->assertMimeType(['image/bmp', 'image/x-ms-bmp'], (string) $result); } public function testEncodeReduced(): void diff --git a/tests/Drivers/Imagick/Encoders/GifEncoderTest.php b/tests/Drivers/Imagick/Encoders/GifEncoderTest.php index 3f617484..f0db3dc9 100644 --- a/tests/Drivers/Imagick/Encoders/GifEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/GifEncoderTest.php @@ -4,13 +4,10 @@ namespace Intervention\Image\Tests\Drivers\Imagick\Encoders; use Imagick; use ImagickPixel; -use Intervention\Image\Collection; use Intervention\Image\Drivers\Imagick\Encoders\GifEncoder; use Intervention\Image\Drivers\Imagick\Image; use Intervention\Image\Tests\TestCase; use Intervention\Image\Tests\Traits\CanCreateImagickTestImage; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageGif; /** * @requires extension imagick @@ -47,7 +44,7 @@ class GifEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new GifEncoder(); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageGif())); + $this->assertMimeType('image/gif', (string) $result); } public function testEncodeReduced(): void diff --git a/tests/Drivers/Imagick/Encoders/JpegEncoderTest.php b/tests/Drivers/Imagick/Encoders/JpegEncoderTest.php index c5e7b702..1931eb47 100644 --- a/tests/Drivers/Imagick/Encoders/JpegEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/JpegEncoderTest.php @@ -7,8 +7,6 @@ use ImagickPixel; use Intervention\Image\Drivers\Imagick\Encoders\JpegEncoder; use Intervention\Image\Drivers\Imagick\Image; use Intervention\Image\Tests\TestCase; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageJpeg; /** * @requires extension imagick @@ -29,6 +27,6 @@ class JpegEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new JpegEncoder(75); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString($result)->matches(new ImageJpeg())); + $this->assertMimeType('image/jpeg', (string) $result); } } diff --git a/tests/Drivers/Imagick/Encoders/PngEncoderTest.php b/tests/Drivers/Imagick/Encoders/PngEncoderTest.php index 55bb4eaa..dde74af4 100644 --- a/tests/Drivers/Imagick/Encoders/PngEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/PngEncoderTest.php @@ -8,10 +8,8 @@ use Imagick; use ImagickPixel; use Intervention\Image\Drivers\Imagick\Encoders\PngEncoder; use Intervention\Image\Drivers\Imagick\Image; +use Intervention\Image\Tests\TestCase; use Intervention\Image\Tests\Traits\CanCreateImagickTestImage; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImagePng; -use PHPUnit\Framework\TestCase; /** * @requires extension imagick @@ -33,7 +31,7 @@ final class PngEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new PngEncoder(75); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString((string) $result)->matches(new ImagePng())); + $this->assertMimeType('image/png', (string) $result); } public function testEncodeReduced(): void diff --git a/tests/Drivers/Imagick/Encoders/WebpEncoderTest.php b/tests/Drivers/Imagick/Encoders/WebpEncoderTest.php index 69e9df2f..a68bfbfc 100644 --- a/tests/Drivers/Imagick/Encoders/WebpEncoderTest.php +++ b/tests/Drivers/Imagick/Encoders/WebpEncoderTest.php @@ -8,9 +8,7 @@ use Imagick; use ImagickPixel; use Intervention\Image\Drivers\Imagick\Encoders\WebpEncoder; use Intervention\Image\Drivers\Imagick\Image; -use Intervention\MimeSniffer\MimeSniffer; -use Intervention\MimeSniffer\Types\ImageWebp; -use PHPUnit\Framework\TestCase; +use Intervention\Image\Tests\TestCase; /** * @requires extension imagick @@ -30,6 +28,6 @@ final class WebpEncoderTest extends TestCase $image = $this->getTestImage(); $encoder = new WebpEncoder(75); $result = $encoder->encode($image); - $this->assertTrue(MimeSniffer::createFromString((string) $result)->matches(new ImageWebp())); + $this->assertMimeType('image/webp', (string) $result); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 8f76a724..f40ecea7 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -30,4 +30,16 @@ abstract class TestCase extends MockeryTestCase $channel = $color->channel(Alpha::class); $this->assertEquals(0, $channel->value()); } + + protected function assertMimeType(string|array $allowed, string $input): void + { + $pointer = fopen('php://temp', 'rw'); + fputs($pointer, $input); + rewind($pointer); + $detected = mime_content_type($pointer); + fclose($pointer); + + $allowed = is_string($allowed) ? [$allowed] : $allowed; + $this->assertTrue(in_array($detected, $allowed)); + } }