1
0
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:
Oliver Vogel
2023-11-12 11:32:08 +01:00
parent 5e3c6973df
commit 8b8bcb0d9c
17 changed files with 46 additions and 57 deletions

View File

@@ -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",

View File

@@ -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

View File

@@ -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
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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));
}
}