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());
 }
Exemple #3
0
 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;
 }