1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-01 11:30:16 +02:00

Add file pointer image decoder

This commit is contained in:
Oliver Vogel
2023-10-04 16:29:28 +02:00
parent defc71240d
commit 1c45941711
6 changed files with 102 additions and 0 deletions

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

View File

@@ -8,6 +8,7 @@ class InputHandler extends AbstractInputHandler
{
protected $decoders = [
Decoders\ImageObjectDecoder::class,
Decoders\FilePointerImageDecoder::class,
Decoders\ArrayColorDecoder::class,
Decoders\HtmlColorNameDecoder::class,
Decoders\RgbStringColorDecoder::class,

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

View File

@@ -8,6 +8,7 @@ class InputHandler extends AbstractInputHandler
{
protected $decoders = [
Decoders\ImageObjectDecoder::class,
Decoders\FilePointerImageDecoder::class,
Decoders\ArrayColorDecoder::class,
Decoders\HexColorDecoder::class,
Decoders\HtmlColorNameDecoder::class,

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

View File

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