mirror of
https://github.com/Intervention/image.git
synced 2025-08-06 13:56:30 +02:00
Add file pointer image decoder
This commit is contained in:
25
src/Drivers/Gd/Decoders/FilePointerImageDecoder.php
Normal file
25
src/Drivers/Gd/Decoders/FilePointerImageDecoder.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Intervention\Image\Drivers\Gd\Decoders;
|
||||||
|
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
|
|
||||||
|
class FilePointerImageDecoder extends BinaryImageDecoder
|
||||||
|
{
|
||||||
|
public function decode($input): ImageInterface|ColorInterface
|
||||||
|
{
|
||||||
|
if (!is_resource($input) || !in_array(get_resource_type($input), ['file', 'stream'])) {
|
||||||
|
throw new DecoderException('Unable to decode input');
|
||||||
|
}
|
||||||
|
|
||||||
|
$contents = '';
|
||||||
|
rewind($input);
|
||||||
|
while (!feof($input)) {
|
||||||
|
$contents .= fread($input, 8192);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::decode($contents);
|
||||||
|
}
|
||||||
|
}
|
@@ -8,6 +8,7 @@ class InputHandler extends AbstractInputHandler
|
|||||||
{
|
{
|
||||||
protected $decoders = [
|
protected $decoders = [
|
||||||
Decoders\ImageObjectDecoder::class,
|
Decoders\ImageObjectDecoder::class,
|
||||||
|
Decoders\FilePointerImageDecoder::class,
|
||||||
Decoders\ArrayColorDecoder::class,
|
Decoders\ArrayColorDecoder::class,
|
||||||
Decoders\HtmlColorNameDecoder::class,
|
Decoders\HtmlColorNameDecoder::class,
|
||||||
Decoders\RgbStringColorDecoder::class,
|
Decoders\RgbStringColorDecoder::class,
|
||||||
|
25
src/Drivers/Imagick/Decoders/FilePointerImageDecoder.php
Normal file
25
src/Drivers/Imagick/Decoders/FilePointerImageDecoder.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Intervention\Image\Drivers\Imagick\Decoders;
|
||||||
|
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
|
|
||||||
|
class FilePointerImageDecoder extends BinaryImageDecoder
|
||||||
|
{
|
||||||
|
public function decode($input): ImageInterface|ColorInterface
|
||||||
|
{
|
||||||
|
if (!is_resource($input) || !in_array(get_resource_type($input), ['file', 'stream'])) {
|
||||||
|
throw new DecoderException('Unable to decode input');
|
||||||
|
}
|
||||||
|
|
||||||
|
$contents = '';
|
||||||
|
rewind($input);
|
||||||
|
while (!feof($input)) {
|
||||||
|
$contents .= fread($input, 8192);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::decode($contents);
|
||||||
|
}
|
||||||
|
}
|
@@ -8,6 +8,7 @@ class InputHandler extends AbstractInputHandler
|
|||||||
{
|
{
|
||||||
protected $decoders = [
|
protected $decoders = [
|
||||||
Decoders\ImageObjectDecoder::class,
|
Decoders\ImageObjectDecoder::class,
|
||||||
|
Decoders\FilePointerImageDecoder::class,
|
||||||
Decoders\ArrayColorDecoder::class,
|
Decoders\ArrayColorDecoder::class,
|
||||||
Decoders\HexColorDecoder::class,
|
Decoders\HexColorDecoder::class,
|
||||||
Decoders\HtmlColorNameDecoder::class,
|
Decoders\HtmlColorNameDecoder::class,
|
||||||
|
25
tests/Drivers/Gd/Decoders/FilePointerImageDecoderTest.php
Normal file
25
tests/Drivers/Gd/Decoders/FilePointerImageDecoderTest.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Intervention\Image\Tests\Drivers\Gd\Decoders;
|
||||||
|
|
||||||
|
use Intervention\Image\Drivers\Gd\Decoders\FilePointerImageDecoder;
|
||||||
|
use Intervention\Image\Drivers\Gd\Image;
|
||||||
|
use Intervention\Image\Tests\TestCase;
|
||||||
|
use Intervention\Image\Tests\Traits\CanCreateGdTestImage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires extension gd
|
||||||
|
* @covers \Intervention\Image\Drivers\Gd\Decoders\FilePointerImageDecoder
|
||||||
|
*/
|
||||||
|
class FilePointerImageDecoderTest extends TestCase
|
||||||
|
{
|
||||||
|
use CanCreateGdTestImage;
|
||||||
|
|
||||||
|
public function testDecode(): void
|
||||||
|
{
|
||||||
|
$decoder = new FilePointerImageDecoder();
|
||||||
|
$fp = fopen($this->getTestImagePath('test.jpg'), 'r');
|
||||||
|
$result = $decoder->decode($fp);
|
||||||
|
$this->assertInstanceOf(Image::class, $result);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Intervention\Image\Tests\Drivers\Imagick\Decoders;
|
||||||
|
|
||||||
|
use Intervention\Image\Drivers\Imagick\Decoders\FilePointerImageDecoder;
|
||||||
|
use Intervention\Image\Drivers\Imagick\Image;
|
||||||
|
use Intervention\Image\Tests\TestCase;
|
||||||
|
use Intervention\Image\Tests\Traits\CanCreateImagickTestImage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires extension imagick
|
||||||
|
* @covers \Intervention\Image\Drivers\Imagick\Decoders\FilePointerImageDecoder
|
||||||
|
*/
|
||||||
|
class FilePointerImageDecoderTest extends TestCase
|
||||||
|
{
|
||||||
|
use CanCreateImagickTestImage;
|
||||||
|
|
||||||
|
public function testDecode(): void
|
||||||
|
{
|
||||||
|
$decoder = new FilePointerImageDecoder();
|
||||||
|
$fp = fopen($this->getTestImagePath('test.jpg'), 'r');
|
||||||
|
$result = $decoder->decode($fp);
|
||||||
|
$this->assertInstanceOf(Image::class, $result);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user