mirror of
https://github.com/Intervention/image.git
synced 2025-08-01 11:30:16 +02:00
Remove MimeSniffer dependency
This commit is contained in:
@@ -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",
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user