mirror of
https://github.com/Intervention/image.git
synced 2025-09-08 05:00:41 +02:00
Refactor storage of Imagick core, remove method
Imagick core image was disassembled in the decoding process. This made the whole object not very memory efficient. This fixes the issue by keeping the original Imagick object in the Intervention Image object. Also the Image::getFrames() method was removed. Users should use iteration to access frames.
This commit is contained in:
@@ -30,58 +30,17 @@ class AbstractImageTest extends TestCase
|
||||
|
||||
$collection = new Collection([$frame1, $frame2, $frame3]);
|
||||
|
||||
$mock = Mockery::mock(AbstractImage::class, ImageInterface::class, [$collection])
|
||||
$mock = Mockery::mock(AbstractImage::class, ImageInterface::class)
|
||||
->shouldAllowMockingProtectedMethods()
|
||||
->makePartial();
|
||||
|
||||
$mock->shouldReceive('getWidth')->andReturn(300);
|
||||
$mock->shouldReceive('getHeight')->andReturn(200);
|
||||
$mock->shouldReceive('getIterator')->andReturn($collection);
|
||||
|
||||
return $mock;
|
||||
}
|
||||
|
||||
public function testGetIterator(): void
|
||||
{
|
||||
$this->assertInstanceOf(Collection::class, $this->abstractImageMock()->getIterator());
|
||||
}
|
||||
|
||||
public function testGetFrames(): void
|
||||
{
|
||||
$this->assertInstanceOf(Collection::class, $this->abstractImageMock()->getFrames());
|
||||
}
|
||||
|
||||
public function testGetFrame(): void
|
||||
{
|
||||
$img = $this->abstractImageMock();
|
||||
|
||||
$this->assertInstanceOf(FrameInterface::class, $img->getFrame());
|
||||
$this->assertEquals(1, $img->getFrame()->ident());
|
||||
|
||||
$this->assertInstanceOf(FrameInterface::class, $img->getFrame(1));
|
||||
$this->assertEquals(2, $img->getFrame(1)->ident());
|
||||
|
||||
$this->assertInstanceOf(FrameInterface::class, $img->getFrame(2));
|
||||
$this->assertEquals(3, $img->getFrame(2)->ident());
|
||||
}
|
||||
|
||||
public function testAddFrame(): void
|
||||
{
|
||||
$img = $this->abstractImageMock();
|
||||
$this->assertEquals(3, $img->getFrames()->count());
|
||||
$result = $img->addFrame(Mockery::mock(FrameInterface::class));
|
||||
$this->assertInstanceOf(AbstractImage::class, $result);
|
||||
$this->assertEquals(4, $img->getFrames()->count());
|
||||
}
|
||||
|
||||
public function testSetGetLoops(): void
|
||||
{
|
||||
$img = $this->abstractImageMock();
|
||||
$this->assertEquals(0, $img->getLoops());
|
||||
$result = $img->setLoops(10);
|
||||
$this->assertEquals(10, $img->getLoops());
|
||||
$this->assertInstanceOf(AbstractImage::class, $result);
|
||||
}
|
||||
|
||||
public function testGetSize(): void
|
||||
{
|
||||
$img = $this->abstractImageMock();
|
||||
@@ -98,19 +57,6 @@ class AbstractImageTest extends TestCase
|
||||
$this->assertEquals(200, $img->size()->getHeight());
|
||||
}
|
||||
|
||||
public function testIsAnimated(): void
|
||||
{
|
||||
$img = Mockery::mock(AbstractImage::class, [new Collection()])->makePartial();
|
||||
$this->assertFalse($img->isAnimated());
|
||||
|
||||
$collection = new Collection([
|
||||
Mockery::mock(FrameInterface::class),
|
||||
Mockery::mock(FrameInterface::class),
|
||||
]);
|
||||
$img = Mockery::mock(AbstractImage::class, [$collection])->makePartial();
|
||||
$this->assertTrue($img->isAnimated());
|
||||
}
|
||||
|
||||
public function testModify(): void
|
||||
{
|
||||
$img = $this->abstractImageMock();
|
||||
|
@@ -37,6 +37,12 @@ class ImageTest extends TestCase
|
||||
$this->assertInstanceOf(Image::class, $this->image);
|
||||
}
|
||||
|
||||
public function testCount(): void
|
||||
{
|
||||
$this->assertEquals(3, $this->image->count());
|
||||
$this->assertEquals(3, count($this->image));
|
||||
}
|
||||
|
||||
public function testIterator(): void
|
||||
{
|
||||
foreach ($this->image as $frame) {
|
||||
@@ -44,12 +50,6 @@ class ImageTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testGetFrames(): void
|
||||
{
|
||||
$this->assertInstanceOf(Collection::class, $this->image->getFrames());
|
||||
$this->assertCount(3, $this->image->getFrames());
|
||||
}
|
||||
|
||||
public function testGetFrame(): void
|
||||
{
|
||||
$this->assertInstanceOf(Frame::class, $this->image->getFrame());
|
||||
@@ -58,10 +58,10 @@ class ImageTest extends TestCase
|
||||
|
||||
public function testAddFrame(): void
|
||||
{
|
||||
$this->assertCount(3, $this->image->getFrames());
|
||||
$this->assertCount(3, $this->image);
|
||||
$result = $this->image->addFrame(new Frame(imagecreatetruecolor(3, 2)));
|
||||
$this->assertInstanceOf(Image::class, $result);
|
||||
$this->assertCount(4, $this->image->getFrames());
|
||||
$this->assertCount(4, $this->image);
|
||||
}
|
||||
|
||||
public function testSetGetLoops(): void
|
||||
|
@@ -20,20 +20,24 @@ class GifEncoderTest extends TestCase
|
||||
{
|
||||
protected function getTestImage(): Image
|
||||
{
|
||||
$imagick1 = new Imagick();
|
||||
$imagick1->newImage(30, 20, new ImagickPixel('red'), 'png');
|
||||
$frame1 = new Frame($imagick1);
|
||||
$frame1->setDelay(50);
|
||||
$imagick2 = new Imagick();
|
||||
$imagick2->newImage(30, 20, new ImagickPixel('green'), 'png');
|
||||
$frame2 = new Frame($imagick2);
|
||||
$frame2->setDelay(50);
|
||||
$imagick3 = new Imagick();
|
||||
$imagick3->newImage(30, 20, new ImagickPixel('blue'), 'png');
|
||||
$frame3 = new Frame($imagick3);
|
||||
$frame3->setDelay(50);
|
||||
$imagick = new Imagick();
|
||||
|
||||
return new Image(new Collection([$frame1, $frame2, $frame3]));
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(30, 20, new ImagickPixel('red'), 'png');
|
||||
$frame->setImageDelay(50);
|
||||
$imagick->addImage($frame);
|
||||
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(30, 20, new ImagickPixel('green'), 'png');
|
||||
$frame->setImageDelay(50);
|
||||
$imagick->addImage($frame);
|
||||
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(30, 20, new ImagickPixel('blue'), 'png');
|
||||
$frame->setImageDelay(50);
|
||||
$imagick->addImage($frame);
|
||||
|
||||
return new Image($imagick);
|
||||
}
|
||||
|
||||
public function testEncode(): void
|
||||
|
@@ -4,9 +4,7 @@ namespace Intervention\Image\Tests\Drivers\Imagick\Encoders;
|
||||
|
||||
use Imagick;
|
||||
use ImagickPixel;
|
||||
use Intervention\Image\Collection;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\JpegEncoder;
|
||||
use Intervention\Image\Drivers\Imagick\Frame;
|
||||
use Intervention\Image\Drivers\Imagick\Image;
|
||||
use Intervention\Image\Tests\TestCase;
|
||||
use Intervention\MimeSniffer\MimeSniffer;
|
||||
@@ -22,9 +20,8 @@ class JpegEncoderTest extends TestCase
|
||||
{
|
||||
$imagick = new Imagick();
|
||||
$imagick->newImage(3, 2, new ImagickPixel('red'), 'png');
|
||||
$frame = new Frame($imagick);
|
||||
|
||||
return new Image(new Collection([$frame]));
|
||||
return new Image($imagick);
|
||||
}
|
||||
|
||||
public function testEncode(): void
|
||||
|
@@ -6,9 +6,7 @@ namespace Intervention\Image\Tests\Drivers\Imagick\Encoders;
|
||||
|
||||
use Imagick;
|
||||
use ImagickPixel;
|
||||
use Intervention\Image\Collection;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\PngEncoder;
|
||||
use Intervention\Image\Drivers\Imagick\Frame;
|
||||
use Intervention\Image\Drivers\Imagick\Image;
|
||||
use Intervention\MimeSniffer\MimeSniffer;
|
||||
use Intervention\MimeSniffer\Types\ImagePng;
|
||||
@@ -23,9 +21,8 @@ final class PngEncoderTest extends TestCase
|
||||
{
|
||||
$imagick = new Imagick();
|
||||
$imagick->newImage(3, 2, new ImagickPixel('red'), 'jpg');
|
||||
$frame = new Frame($imagick);
|
||||
|
||||
return new Image(new Collection([$frame]));
|
||||
return new Image($imagick);
|
||||
}
|
||||
|
||||
public function testEncode(): void
|
||||
|
@@ -6,9 +6,7 @@ namespace Intervention\Image\Tests\Drivers\Imagick\Encoders;
|
||||
|
||||
use Imagick;
|
||||
use ImagickPixel;
|
||||
use Intervention\Image\Collection;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\WebpEncoder;
|
||||
use Intervention\Image\Drivers\Imagick\Frame;
|
||||
use Intervention\Image\Drivers\Imagick\Image;
|
||||
use Intervention\MimeSniffer\MimeSniffer;
|
||||
use Intervention\MimeSniffer\Types\ImageWebp;
|
||||
@@ -23,9 +21,8 @@ final class WebpEncoderTest extends TestCase
|
||||
{
|
||||
$imagick = new Imagick();
|
||||
$imagick->newImage(3, 2, new ImagickPixel('red'), 'png');
|
||||
$frame = new Frame($imagick);
|
||||
|
||||
return new Image(new Collection([$frame]));
|
||||
return new Image($imagick);
|
||||
}
|
||||
|
||||
public function testEncode(): void
|
||||
|
@@ -4,7 +4,6 @@ namespace Intervention\Image\Tests\Drivers\Imagick;
|
||||
|
||||
use Imagick;
|
||||
use ImagickPixel;
|
||||
use Intervention\Image\Collection;
|
||||
use Intervention\Image\Drivers\Imagick\Frame;
|
||||
use Intervention\Image\Drivers\Imagick\Image;
|
||||
use Intervention\Image\Geometry\Size;
|
||||
@@ -20,16 +19,46 @@ class ImageTest extends TestCase
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
// create base image
|
||||
$imagick = new Imagick();
|
||||
$imagick->newImage(3, 2, new ImagickPixel('red'), 'png');
|
||||
|
||||
$this->image = new Image(new Collection([new Frame($imagick)]));
|
||||
// add frame
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(3, 2, new ImagickPixel('red'), 'png');
|
||||
$imagick->addImage($frame);
|
||||
|
||||
// add frame
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(3, 2, new ImagickPixel('green'), 'png');
|
||||
$imagick->addImage($frame);
|
||||
|
||||
// create intervention image
|
||||
$this->image = new Image($imagick);
|
||||
}
|
||||
|
||||
public function testConstructor(): void
|
||||
{
|
||||
$this->assertInstanceOf(Image::class, $this->image);
|
||||
}
|
||||
|
||||
public function testGetFrame(): void
|
||||
{
|
||||
$this->assertInstanceOf(Frame::class, $this->image->getFrame());
|
||||
$this->assertInstanceOf(Frame::class, $this->image->getFrame(1));
|
||||
$this->assertNull($this->image->getFrame(2));
|
||||
}
|
||||
|
||||
public function testAddFrame(): void
|
||||
{
|
||||
$frame = new Imagick();
|
||||
$frame->newImage(3, 2, new ImagickPixel('blue'), 'png');
|
||||
$frame = new Frame($frame);
|
||||
|
||||
$this->assertCount(2, $this->image);
|
||||
$result = $this->image->addFrame($frame);
|
||||
$this->assertInstanceOf(Image::class, $result);
|
||||
$this->assertCount(3, $this->image);
|
||||
}
|
||||
|
||||
public function testIterator(): void
|
||||
{
|
||||
@@ -38,6 +67,12 @@ class ImageTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testCount(): void
|
||||
{
|
||||
$this->assertEquals(2, $this->image->count());
|
||||
$this->assertEquals(2, count($this->image));
|
||||
}
|
||||
|
||||
public function testWidth(): void
|
||||
{
|
||||
$this->assertEquals(3, $this->image->getWidth());
|
||||
|
Reference in New Issue
Block a user