<?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());
}
}
|