/**
  * Applies the sepia filter to an image resource
  *
  * @param ImageResource $aResource
  */
 public function applyFilter(ImageResource $aResource)
 {
     if ($this->degrees === 0) {
         return;
     }
     $width = $aResource->getX();
     $height = $aResource->getY();
     // cache calculated colors in a map...
     $colorMap = array();
     for ($x = 0; $x < $width; ++$x) {
         for ($y = 0; $y < $height; ++$y) {
             $color = ColorUtil::getColorAt($aResource, Coordinate::create($x, $y));
             if (!isset($colorMap[$color->getColorIndex()])) {
                 // calculate the new color
                 $hsl = ColorUtil::rgb2hsl($color->getRed(), $color->getGreen(), $color->getBlue());
                 $hsl[0] += $this->degrees;
                 $rgb = ColorUtil::hsl2rgb($hsl[0], $hsl[1], $hsl[2]);
                 $newcol = imagecolorallocate($aResource->getResource(), $rgb[0], $rgb[1], $rgb[2]);
                 $colorMap[$color->getColorIndex()] = $newcol;
             } else {
                 $newcol = $colorMap[$color->getColorIndex()];
             }
             imagesetpixel($aResource->getResource(), $x, $y, $newcol);
         }
     }
     $colorMap = null;
 }
 public function testCreate()
 {
     $width = 250;
     $height = 750;
     $color = 'ff00ff';
     $res = ImageGenerator::create($width, $height, new Color($color));
     $this->assertEquals($width, $res->getX());
     $this->assertEquals($height, $res->getY());
     $this->assertEquals($color, ColorUtil::getColorAt($res, Coordinate::create(0, 0))->getHexColor());
     $this->assertEquals($color, ColorUtil::getColorAt($res, Coordinate::create($width / 2, $height / 2))->getHexColor());
     $this->assertEquals($color, ColorUtil::getColorAt($res, Coordinate::create($width - 1, $height - 1))->getHexColor());
 }
 public function testGradient()
 {
     $width = 250;
     $height = 750;
     $startColor = 'ffffff';
     $endColor = '000000';
     $res = ImageGenerator::gradient($width, $height, 1, new Color($startColor), new Color($endColor));
     $this->assertEquals($width, $res->getWidth());
     $this->assertEquals($height, $res->getHeight());
     $this->assertEquals($startColor, ColorUtil::getColorAt($res, Coordinate::create(0, 0))->getHexColor());
     $this->assertEquals('7e7e7e', ColorUtil::getColorAt($res, Coordinate::create($width / 2, $height / 2))->getHexColor());
     $this->assertEquals($endColor, ColorUtil::getColorAt($res, Coordinate::create($width - 1, $height - 1))->getHexColor());
 }
 public function testFilter()
 {
     $image = $this->getOriginalImage(ImageType::PNG);
     $filter = new ImageFilterGrayScale();
     $rasterizer = new Rasterizer($image, new GridRasterStrategy(25, 25, true));
     $segments = $rasterizer->getSegments();
     $rasterizer->filter($filter, $segments->offsetGet(0));
     $rasterizer->filter($filter, $segments->offsetGet(5));
     $originalColor = "ff0000";
     $filteredColor = "4c4c4c";
     $color = ColorUtil::getColorAt($rasterizer->getResource(), Coordinate::create(50, 50));
     $this->assertEquals($filteredColor, $color->getHexColor());
     $color = ColorUtil::getColorAt($rasterizer->getResource(), Coordinate::create(160, 50));
     $this->assertEquals($originalColor, $color->getHexColor());
     $color = ColorUtil::getColorAt($rasterizer->getResource(), Coordinate::create(50, 160));
     $this->assertEquals($originalColor, $color->getHexColor());
     $color = ColorUtil::getColorAt($rasterizer->getResource(), Coordinate::create(160, 160));
     $this->assertEquals($filteredColor, $color->getHexColor());
 }
 protected function assertColorQ4(ImageImageResource $aRes, $aColor)
 {
     $coord = Coordinate::create($aRes->getWidth() - self::OFFSET, $aRes->getHeight() - self::OFFSET);
     $testColor = $aRes->getColorAt($coord)->getHexColor();
     $this->assertEquals($aColor, $testColor, "Checking color in quadrant 4 {$coord} {$aColor} vs {$testColor}");
 }
 /**
  * Returns the color at the specified location of the image resource
  *
  * @param ImageResource $aResource
  * @param Coordinate $aCoordinate
  *
  * @return IColor The color found at the coordinates
  */
 public static function getColorAt(ImageResource $aResource, Coordinate $aCoordinate)
 {
     $index = imagecolorat($aResource->getResource(), $aCoordinate->getX(), $aCoordinate->getY());
     $color = new Color($index);
     return $color;
 }
 public function testGetColorAt()
 {
     $res = $this->getImageRes($this->getOriginalImage(ImageType::JPG), __METHOD__);
     $color = ColorUtil::getColorAt($res, Coordinate::create(20, 20));
     $this->assertColor($color, 'fe0000');
 }