<?php 
 
use movemegif\data\Clipper; 
use movemegif\data\Formatter; 
use movemegif\domain\ClippingArea; 
use movemegif\domain\Frame; 
use movemegif\domain\GdCanvas; 
use movemegif\domain\StringCanvas; 
 
require_once __DIR__ . '/../../php/autoloader.php'; 
 
/** 
 * @author Patrick van Bergen 
 */ 
class ClipTest extends PHPUnit_Framework_TestCase 
{ 
    public function testClipGdCanvas() 
    { 
        $builder = new \movemegif\GifBuilder(10, 10); 
 
        // red background 
        $canvas = new GdCanvas(10, 10); 
        $red = imagecolorallocate($canvas->getResource(), 0xff, 0x00, 0x00); 
        imagefilledrectangle($canvas->getResource(), 0, 0, 10, 10, $red); 
 
        $builder->addFrame()->setCanvas($canvas)->setUseGlobalColorTable(); 
 
        // green/blue rectangle 
        $canvas = new GdCanvas(6, 6); 
        $green = imagecolorallocate($canvas->getResource(), 0x00, 0xff, 0x00); 
        $blue = imagecolorallocate($canvas->getResource(), 0x00, 0x00, 0xff); 
        imagefilledrectangle($canvas->getResource(), 0, 0, 6, 3, $green); 
        imagefilledrectangle($canvas->getResource(), 0, 3, 6, 6, $blue); 
 
        $clip = new ClippingArea(); 
        $clip->includePoint(1, 1)->includePoint(4, 4); 
        $builder->addFrame()->setCanvas($canvas)->setTop(2)->setLeft(2)->setClip($clip)->setUseGlobalColorTable(); 
 
        $contents = $builder->getContents(); 
 
        $actual = Formatter::byteString2hexString($contents); 
        $expected = '47 49 46 38 39 61 0A 00 0A 00 91 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 21 F9 04 00 00 00 00 00 2C 00 00 00 00 0A 00 0A 00 00 02 08 84 8F A9 CB ED 0F 63 2B 00 21 F9 04 00 00 00 00 00 2C 03 00 03 00 04 00 04 00 00 02 05 8C 6F A2 AB 05 00 21 FE 16 43 72 65 61 74 65 64 20 77 69 74 68 20 6D 6F 76 65 6D 65 67 69 66 00 3B'; 
 
        $this->assertEquals($expected, $actual); 
    } 
 
    public function testClipStringCanvas() 
    { 
        $builder = new \movemegif\GifBuilder(10, 10); 
 
        // red background 
        $indexString = " 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
            1 1 1 1 1 1 1 1 1 1 
        "; 
        $index2color = array( 
            '1' => 0xff0000 
        ); 
        $canvas = new StringCanvas(10, 10, $indexString, $index2color); 
 
        $builder->addFrame()->setCanvas($canvas)->setUseGlobalColorTable(); 
 
        // green/blue rectangle 
        $indexString = " 
            1 1 1 1 1 1 
            1 1 1 1 1 1 
            1 1 1 1 1 1 
            2 2 2 2 2 2 
            2 2 2 2 2 2 
            2 2 2 2 2 2 
        "; 
        $index2color = array( 
            '1' => 0x00ff00, 
            '2' => 0x0000ff, 
        ); 
        $canvas = new StringCanvas(6, 6, $indexString, $index2color); 
 
        $clip = new ClippingArea(); 
        $clip->includePoint(1, 1)->includePoint(4, 4); 
        $builder->addFrame()->setCanvas($canvas)->setTop(2)->setLeft(2)->setClip($clip)->setUseGlobalColorTable(); 
 
        $contents = $builder->getContents(); 
 
        $actual = Formatter::byteString2hexString($contents); 
        $expected = '47 49 46 38 39 61 0A 00 0A 00 91 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 21 F9 04 00 00 00 00 00 2C 00 00 00 00 0A 00 0A 00 00 02 08 84 8F A9 CB ED 0F 63 2B 00 21 F9 04 00 00 00 00 00 2C 03 00 03 00 04 00 04 00 00 02 05 8C 6F A2 AB 05 00 21 FE 16 43 72 65 61 74 65 64 20 77 69 74 68 20 6D 6F 76 65 6D 65 67 69 66 00 3B'; 
 
        $this->assertEquals($expected, $actual); 
    } 
 
    public function testClipperClip() 
    { 
        $indexString = " 
            1 1 1 1 1 1 
            1 1 1 1 1 1 
            1 1 1 1 1 1 
            2 2 2 2 2 2 
            2 2 2 2 2 2 
            2 2 2 2 2 2 
        "; 
        $index2color = array( 
            '1' => 0x00ff00, 
            '2' => 0x0000ff, 
        ); 
        $canvas = new StringCanvas(6, 6, $indexString, $index2color); 
 
        $frame = new Frame(); 
        $frame->setCanvas($canvas); 
        $frame->setLeft(1)->setTop(2); 
        $frame->setClip(new ClippingArea(3, 1, 7, 7)); 
 
        $clipper = new Clipper(); 
        $clip = $clipper->getClip($frame, 6, 6); 
 
        $this->assertSame(3, $clip->getLeft()); 
        $this->assertSame(1, $clip->getTop()); 
        $this->assertSame(4, $clip->getRight()); 
        $this->assertSame(3, $clip->getBottom()); 
 
        $frame = new Frame(); 
        $frame->setCanvas($canvas); 
        $frame->setLeft(-2)->setTop(-2); 
        $frame->setClip(new ClippingArea(-1, -2, 4, 3)); 
 
        $clipper = new Clipper(); 
        $clip = $clipper->getClip($frame, 6, 6); 
 
        $this->assertSame(2, $clip->getLeft()); 
        $this->assertSame(2, $clip->getTop()); 
        $this->assertSame(4, $clip->getRight()); 
        $this->assertSame(3, $clip->getBottom()); 
    } 
}
 
 |