コード例 #1
0
ファイル: ColorTest.php プロジェクト: gridguyz/zork
 /**
  * Test distance
  */
 public function testDistance()
 {
     $this->assertGreaterThan(0.8, Color::create('ff0000')->distance('0000ff'));
     $this->assertLessThan(0.1, Color::create('ff0000')->distance('f80800'));
 }
コード例 #2
0
ファイル: Image.php プロジェクト: gridguyz/zork
 /**
  * Filter method: colorize
  *
  * @param string|\Zork\Image\Color $color
  * @return \Zork\Image\Image
  * @throws \Zork\Image\FilterException
  * @codeCoverageIgnore
  */
 public function filterColorize($color = 'gray')
 {
     if (!$color instanceof Color) {
         $color = Color::create($color);
     }
     if (!imagefilter($this->resource, IMG_FILTER_COLORIZE, $color->getRed(), $color->getGreen(), $color->getBlue(), intval($color->getAlpha() * 127 / 255))) {
         throw new Exception\FilterException('Filter cannot execute');
     }
 }
コード例 #3
0
ファイル: ImageTest.php プロジェクト: gridguyz/zork
 /**
  * Assert 2 image files are equals (within a tolerance)
  *
  * @param   string  $expected
  * @param   string  $actual
  * @param   string  $message
  * @param   float   $downscale
  * @param   float   $tolerance
  * @param   bool    $alpha
  */
 protected function assertImageFileEquals($expected, $actual, $message = '', $downscale = 5, $tolerance = 0.1, $alpha = false)
 {
     $expectedInfo = getimagesize($expected);
     $actualInfo = getimagesize($actual);
     $this->assertSame(array_slice($expectedInfo, 0, 3), array_slice($actualInfo, 0, 3), $message);
     list($width, $height, $type) = $actualInfo;
     $scaleToWidth = max(1, intval($width / $downscale));
     $scaleToHeight = max(1, intval($height / $downscale));
     $this->assertContains($type, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), 'Image types are not comparable');
     switch ($type) {
         case IMAGETYPE_GIF:
             $expectedInput = imagecreatefromgif($expected);
             $actualInput = imagecreatefromgif($actual);
             break;
         case IMAGETYPE_JPEG:
             $expectedInput = imagecreatefromjpeg($expected);
             $actualInput = imagecreatefromjpeg($actual);
             break;
         case IMAGETYPE_PNG:
             $expectedInput = imagecreatefrompng($expected);
             $actualInput = imagecreatefrompng($actual);
             break;
         default:
             throw new \Exception();
     }
     $expectedCompare = imagecreatetruecolor($scaleToWidth, $scaleToHeight);
     $actualCompare = imagecreatetruecolor($scaleToWidth, $scaleToHeight);
     imagecopyresampled($expectedCompare, $expectedInput, 0, 0, 0, 0, $scaleToWidth, $scaleToHeight, $width, $height);
     imagecopyresampled($actualCompare, $actualInput, 0, 0, 0, 0, $scaleToWidth, $scaleToHeight, $width, $height);
     $distance = 0;
     for ($x = 0; $x < $scaleToWidth; $x++) {
         for ($y = 0; $y < $scaleToHeight; $y++) {
             $expectedIndex = imagecolorat($expectedCompare, $x, $y);
             $actualIndex = imagecolorat($actualCompare, $x, $y);
             @(list($er, $eg, $eb, $ea) = imagecolorsforindex($expectedCompare, $expectedIndex));
             @(list($ar, $ag, $ab, $aa) = imagecolorsforindex($actualCompare, $actualIndex));
             $ea = $alpha ? intval($ea * 255 / 127) : 0;
             $aa = $alpha ? intval($aa * 255 / 127) : 0;
             $expectedColor = new Color($er, $eg, $eb, $ea);
             $actualColor = new Color($ar, $ag, $ab, $aa);
             $distance += $expectedColor->distance($actualColor, $alpha);
         }
     }
     $this->assertLessThanOrEqual($tolerance, $distance / $scaleToWidth / $scaleToHeight, $message);
 }