public function testEncodeDecoded() { // create decoded $decoder = new Decoder('tests/images/animation.gif'); $decoded = $decoder->decode(); // check before encoding $this->assertEquals(20, $decoded->getCanvasWidth()); $this->assertEquals(15, $decoded->getCanvasHeight()); $this->assertEquals(8, $decoded->countFrames()); $this->assertEquals(2, $decoded->getLoops()); $this->assertEquals(32, $decoded->countGlobalColors()); $this->assertTrue($decoded->hasGlobalColorTable()); foreach ($decoded->getFrames() as $frame) { $this->assertEquals(20, $frame->getDelay()); } // encode Decoded $encoder = new Encoder(); $encoder->setFromDecoded($decoded); $encoded = $encoder->encode(); $decoder->initFromData($encoded); $decoded = $decoder->decode(); // check after encoding $this->assertEquals(20, $decoded->getCanvasWidth()); $this->assertEquals(15, $decoded->getCanvasHeight()); $this->assertEquals(8, $decoded->countFrames()); $this->assertEquals(2, $decoded->getLoops()); $this->assertEquals(32, $decoded->countGlobalColors()); $this->assertTrue($decoded->hasGlobalColorTable()); foreach ($decoded->getFrames() as $frame) { $this->assertEquals(20, $frame->getDelay()); } }
public function testSetFromDecoded() { $encoder = new Encoder(); $decoded = Mockery::mock('Intervention\\Gif\\Decoded'); $decoded->shouldReceive('getCanvasWidth')->andReturn(300); $decoded->shouldReceive('getCanvasHeight')->andReturn(200); $decoded->shouldReceive('getGlobalColorTable')->andReturn('global_color_table'); $decoded->shouldReceive('getBackgroundColorIndex')->andReturn('background_color_index'); $decoded->shouldReceive('getLoops')->andReturn(2); $decoded->shouldReceive('getFrames')->andReturn(array('frame1', 'frame2', 'frame3')); $encoder->setFromDecoded($decoded); $this->assertEquals(300, $encoder->canvasWidth); $this->assertEquals(200, $encoder->canvasHeight); $this->assertEquals('global_color_table', $encoder->globalColorTable); $this->assertEquals('background_color_index', $encoder->backgroundColorIndex); $this->assertEquals(2, $encoder->loops); $this->assertEquals(3, count($encoder->frames)); $this->assertTrue($encoder->doesLoop()); }
public static function initFromDecoded(Decoded $decoded) { $container = new self(); $container->setLoops($decoded->getLoops()); // create empty canvas $driver = new Driver(); $canvas = $driver->newImage($decoded->getCanvasWidth(), $decoded->getCanvasHeight())->getCore(); foreach ($decoded->getFrames() as $key => $frame) { // create resource from frame $encoder = new GifEncoder(); $encoder->setFromDecoded($decoded, $key); $frame_resource = imagecreatefromstring($encoder->encode()); // insert frame image data into canvas imagecopy($canvas, $frame_resource, $frame->getOffset()->left, $frame->getOffset()->top, 0, 0, $frame->getSize()->width, $frame->getSize()->height); // destory frame resource imagedestroy($frame_resource); // add frame to container $container->addFrame(new \Intervention\Image\Frame($canvas, $frame->getDelay())); // prepare next canvas $canvas = Helper::cloneResource($canvas); } return $container; }