Skip to content

Commit

Permalink
Remove MimeSniffer dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
olivervogel committed Nov 12, 2023
1 parent 5e3c697 commit 8b8bcb0
Show file tree
Hide file tree
Showing 17 changed files with 46 additions and 57 deletions.
3 changes: 1 addition & 2 deletions composer.json
Expand Up @@ -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",
Expand Down
16 changes: 12 additions & 4 deletions src/Drivers/Abstract/Decoders/AbstractDecoder.php
Expand Up @@ -8,8 +8,6 @@
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
{
Expand Down Expand Up @@ -40,9 +38,19 @@ protected function hasSuccessor(): bool
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
Expand Down
7 changes: 1 addition & 6 deletions src/Drivers/Gd/Decoders/BinaryImageDecoder.php
Expand Up @@ -10,7 +10,6 @@
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;
Expand All @@ -23,11 +22,7 @@ public function decode($input): ImageInterface|ColorInterface
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
}

Expand Down
8 changes: 5 additions & 3 deletions src/Drivers/Imagick/Decoders/BinaryImageDecoder.php
Expand Up @@ -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;
Expand All @@ -18,12 +19,13 @@ public function decode($input): ImageInterface|ColorInterface
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
Expand Down
4 changes: 1 addition & 3 deletions tests/Drivers/Gd/Encoders/AvifEncoderTest.php
Expand Up @@ -7,8 +7,6 @@
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
Expand All @@ -28,6 +26,6 @@ public function testEncode(): void
$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);
}
}
4 changes: 1 addition & 3 deletions tests/Drivers/Gd/Encoders/BmpEncoderTest.php
Expand Up @@ -7,8 +7,6 @@
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
Expand All @@ -28,6 +26,6 @@ public function testEncode(): void
$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);
}
}
4 changes: 1 addition & 3 deletions tests/Drivers/Gd/Encoders/GifEncoderTest.php
Expand Up @@ -8,8 +8,6 @@
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
Expand Down Expand Up @@ -42,7 +40,7 @@ public function testEncode(): void
$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
Expand Down
4 changes: 1 addition & 3 deletions tests/Drivers/Gd/Encoders/JpegEncoderTest.php
Expand Up @@ -7,8 +7,6 @@
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
Expand All @@ -28,6 +26,6 @@ public function testEncode(): void
$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);
}
}
4 changes: 1 addition & 3 deletions tests/Drivers/Gd/Encoders/PngEncoderTest.php
Expand Up @@ -8,8 +8,6 @@
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
Expand All @@ -31,7 +29,7 @@ public function testEncode(): void
$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
Expand Down
6 changes: 2 additions & 4 deletions tests/Drivers/Gd/Encoders/WebpEncoderTest.php
Expand Up @@ -8,9 +8,7 @@
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
Expand All @@ -29,6 +27,6 @@ public function testEncode(): void
$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);
}
}
4 changes: 1 addition & 3 deletions tests/Drivers/Imagick/Encoders/AvifEncoderTest.php
Expand Up @@ -7,8 +7,6 @@
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
Expand All @@ -29,6 +27,6 @@ public function testEncode(): void
$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);
}
}
6 changes: 1 addition & 5 deletions tests/Drivers/Imagick/Encoders/BmpEncoderTest.php
Expand Up @@ -8,8 +8,6 @@
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
Expand All @@ -32,9 +30,7 @@ public function testEncode(): void
$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
Expand Down
5 changes: 1 addition & 4 deletions tests/Drivers/Imagick/Encoders/GifEncoderTest.php
Expand Up @@ -4,13 +4,10 @@

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
Expand Down Expand Up @@ -47,7 +44,7 @@ public function testEncode(): void
$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
Expand Down
4 changes: 1 addition & 3 deletions tests/Drivers/Imagick/Encoders/JpegEncoderTest.php
Expand Up @@ -7,8 +7,6 @@
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
Expand All @@ -29,6 +27,6 @@ public function testEncode(): void
$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);
}
}
6 changes: 2 additions & 4 deletions tests/Drivers/Imagick/Encoders/PngEncoderTest.php
Expand Up @@ -8,10 +8,8 @@
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
Expand All @@ -33,7 +31,7 @@ public function testEncode(): void
$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
Expand Down
6 changes: 2 additions & 4 deletions tests/Drivers/Imagick/Encoders/WebpEncoderTest.php
Expand Up @@ -8,9 +8,7 @@
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
Expand All @@ -30,6 +28,6 @@ public function testEncode(): void
$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);
}
}
12 changes: 12 additions & 0 deletions tests/TestCase.php
Expand Up @@ -30,4 +30,16 @@ protected function assertTransparency(ColorInterface $color)
$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));
}
}

0 comments on commit 8b8bcb0

Please sign in to comment.