1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-21 05:01:20 +02:00

changed default alpha to float values to 0-1

This commit is contained in:
Oliver Vogel
2013-04-07 19:34:15 +02:00
parent ebbc29139f
commit fb2596456d
2 changed files with 95 additions and 80 deletions

View File

@@ -857,17 +857,17 @@ class Image
$alpha = $mask->pickColor($x, $y, 'array'); $alpha = $mask->pickColor($x, $y, 'array');
if ($mask_with_alpha) { if ($mask_with_alpha) {
$alpha = $alpha['alpha']; // use alpha channel as mask $alpha = $alpha['a']; // use alpha channel as mask
} else { } else {
$alpha = 127 - floor($alpha['red'] / 2); // use red channel as mask $alpha = floatval(round($alpha['r'] / 255, 2)); // use red channel as mask
} }
// preserve alpha of original image... // preserve alpha of original image...
if ($color['alpha'] > $alpha) { if ($color['a'] < $alpha) {
$alpha = $color['alpha']; $alpha = $color['a'];
} }
$pixelColor = $this->parseColor(array($color['red'], $color['green'], $color['blue'], $alpha)); $pixelColor = array($color['r'], $color['g'], $color['b'], $alpha);
$maskedImage->pixel($pixelColor, $x, $y); $maskedImage->pixel($pixelColor, $x, $y);
} }
} }
@@ -1245,8 +1245,20 @@ class Image
$color = sprintf('#%02x%02x%02x', $color['red'], $color['green'], $color['blue']); $color = sprintf('#%02x%02x%02x', $color['red'], $color['green'], $color['blue']);
break; break;
case 'int':
case 'integer':
# in gd2 library color already is int...
break;
default:
case 'array': case 'array':
$color = imagecolorsforindex($this->resource, $color); $color = imagecolorsforindex($this->resource, $color);
$color = array(
'r' => $color['red'],
'g' => $color['green'],
'b' => $color['blue'],
'a' => $this->alpha2rgba($color['alpha'])
);
break; break;
} }
@@ -1261,7 +1273,7 @@ class Image
*/ */
public function parseColor($value) public function parseColor($value)
{ {
$alpha = 0; $a = 0; // alpha value
if (is_int($value)) { if (is_int($value)) {
@@ -1274,7 +1286,8 @@ class Image
if (count($value) == 4) { if (count($value) == 4) {
// color array with alpha value // color array with alpha value
list($r, $g, $b, $alpha) = $value; list($r, $g, $b, $a) = $value;
$a = $this->alpha2gd($a);
} elseif (count($value) == 3) { } elseif (count($value) == 3) {
@@ -1305,7 +1318,7 @@ class Image
$r = ($matches[1] >= 0 && $matches[1] <= 255) ? intval($matches[1]) : 0; $r = ($matches[1] >= 0 && $matches[1] <= 255) ? intval($matches[1]) : 0;
$g = ($matches[2] >= 0 && $matches[2] <= 255) ? intval($matches[2]) : 0; $g = ($matches[2] >= 0 && $matches[2] <= 255) ? intval($matches[2]) : 0;
$b = ($matches[3] >= 0 && $matches[3] <= 255) ? intval($matches[3]) : 0; $b = ($matches[3] >= 0 && $matches[3] <= 255) ? intval($matches[3]) : 0;
$alpha = $this->alpha2gd($matches[4]); $a = $this->alpha2gd($matches[4]);
} }
} }
@@ -1316,7 +1329,7 @@ class Image
} elseif (isset($r) && isset($g) && isset($b)) { } elseif (isset($r) && isset($g) && isset($b)) {
return imagecolorallocatealpha($this->resource, $r, $g, $b, $alpha); return imagecolorallocatealpha($this->resource, $r, $g, $b, $a);
} else { } else {

View File

@@ -151,14 +151,14 @@ class ImageTest extends PHPUnit_Framework_Testcase
{ {
$img = Image::canvas(100, 100); $img = Image::canvas(100, 100);
$color = $img->pickColor(50, 50, 'array'); $color = $img->pickColor(50, 50, 'array');
$this->assertInternalType('int', $color['red']); $this->assertInternalType('int', $color['r']);
$this->assertInternalType('int', $color['green']); $this->assertInternalType('int', $color['g']);
$this->assertInternalType('int', $color['blue']); $this->assertInternalType('int', $color['b']);
$this->assertInternalType('int', $color['alpha']); $this->assertInternalType('float', $color['a']);
$this->assertEquals($color['red'], 0); $this->assertEquals($color['r'], 0);
$this->assertEquals($color['green'], 0); $this->assertEquals($color['g'], 0);
$this->assertEquals($color['blue'], 0); $this->assertEquals($color['b'], 0);
$this->assertEquals($color['alpha'], 127); $this->assertEquals($color['a'], 0);
} }
public function testOpenImage() public function testOpenImage()
@@ -532,10 +532,10 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertEquals($img->width, 50); $this->assertEquals($img->width, 50);
$this->assertEquals($img->height, 50); $this->assertEquals($img->height, 50);
$checkColor = $img->pickColor(0, 0, 'array'); $checkColor = $img->pickColor(0, 0, 'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 127); $this->assertEquals($checkColor['a'], 0);
} }
public function testInsertImage() public function testInsertImage()
@@ -804,15 +804,15 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertEquals($img->width, 32); $this->assertEquals($img->width, 32);
$this->assertEquals($img->height, 32); $this->assertEquals($img->height, 32);
$checkColor = $img->pickColor(15, 15, 'array'); $checkColor = $img->pickColor(15, 15, 'array');
$this->assertEquals($checkColor['red'], 254); $this->assertEquals($checkColor['r'], 254);
$this->assertEquals($checkColor['green'], 204); $this->assertEquals($checkColor['g'], 204);
$this->assertEquals($checkColor['blue'], 112); $this->assertEquals($checkColor['b'], 112);
$this->assertEquals($checkColor['alpha'], 64); $this->assertEquals($checkColor['a'], 0.5);
$checkColor = $img->pickColor(31, 31, 'array'); $checkColor = $img->pickColor(31, 31, 'array');
$this->assertEquals($checkColor['red'], 255); $this->assertEquals($checkColor['r'], 255);
$this->assertEquals($checkColor['green'], 166); $this->assertEquals($checkColor['g'], 166);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 64); $this->assertEquals($checkColor['a'], 0.5);
} }
public function testMaskImage() public function testMaskImage()
@@ -826,15 +826,15 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertEquals($img->width, 32); $this->assertEquals($img->width, 32);
$this->assertEquals($img->height, 32); $this->assertEquals($img->height, 32);
$checkColor = $img->pickColor(16, 2, 'array'); $checkColor = $img->pickColor(16, 2, 'array');
$this->assertEquals($checkColor['red'], 254); $this->assertEquals($checkColor['r'], 254);
$this->assertEquals($checkColor['green'], 230); $this->assertEquals($checkColor['g'], 230);
$this->assertEquals($checkColor['blue'], 186); $this->assertEquals($checkColor['b'], 186);
$this->assertEquals($checkColor['alpha'], 22); $this->assertEquals($checkColor['a'], 0.83);
$checkColor = $img->pickColor(31, 31, 'array'); $checkColor = $img->pickColor(31, 31, 'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 127); $this->assertEquals($checkColor['a'], 0);
// use alpha channel as mask // use alpha channel as mask
$img = Image::make('public/test.jpg'); $img = Image::make('public/test.jpg');
@@ -845,15 +845,15 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertEquals($img->width, 32); $this->assertEquals($img->width, 32);
$this->assertEquals($img->height, 32); $this->assertEquals($img->height, 32);
$checkColor = $img->pickColor(5, 5, 'array'); $checkColor = $img->pickColor(5, 5, 'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 127); $this->assertEquals($checkColor['a'], 0);
$checkColor = $img->pickColor(20, 15, 'array'); $checkColor = $img->pickColor(20, 15, 'array');
$this->assertEquals($checkColor['red'], 254); $this->assertEquals($checkColor['r'], 254);
$this->assertEquals($checkColor['green'], 190); $this->assertEquals($checkColor['g'], 190);
$this->assertEquals($checkColor['blue'], 69); $this->assertEquals($checkColor['b'], 69);
$this->assertEquals($checkColor['alpha'], 0); $this->assertEquals($checkColor['a'], 1);
// preserve existing alpha channel // preserve existing alpha channel
$img = Image::make('public/circle.png'); $img = Image::make('public/circle.png');
@@ -864,15 +864,15 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertEquals($img->width, 32); $this->assertEquals($img->width, 32);
$this->assertEquals($img->height, 32); $this->assertEquals($img->height, 32);
$checkColor = $img->pickColor(5, 5, 'array'); $checkColor = $img->pickColor(5, 5, 'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 127); $this->assertEquals($checkColor['a'], 0);
$checkColor = $img->pickColor(15, 15, 'array'); $checkColor = $img->pickColor(15, 15, 'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 25); $this->assertEquals($checkColor['a'], 0.8);
} }
@@ -1106,8 +1106,20 @@ class ImageTest extends PHPUnit_Framework_Testcase
{ {
$img = $this->getTestImage(); $img = $this->getTestImage();
// rgb color array (default)
$color = $img->pickColor(799, 599);
$this->assertInternalType('array', $color);
$this->assertInternalType('int', $color['r']);
$this->assertEquals($color['r'], 255);
$this->assertInternalType('int', $color['g']);
$this->assertEquals($color['g'], 166);
$this->assertInternalType('int', $color['b']);
$this->assertEquals($color['b'], 0);
$this->assertInternalType('float', $color['a']);
$this->assertEquals($color['a'], 1);
// int color // int color
$color = $img->pickColor(100, 100); $color = $img->pickColor(100, 100, 'int');
$this->assertInternalType('int', $color); $this->assertInternalType('int', $color);
$this->assertEquals($color, 16776956); $this->assertEquals($color, 16776956);
@@ -1121,16 +1133,6 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertInternalType('string', $color); $this->assertInternalType('string', $color);
$this->assertEquals($color, '#ffa600'); $this->assertEquals($color, '#ffa600');
// rgb color array
$color = $img->pickColor(799, 599, 'array');
$this->assertInternalType('array', $color);
$this->assertInternalType('int', $color['red']);
$this->assertEquals($color['red'], 255);
$this->assertInternalType('int', $color['green']);
$this->assertEquals($color['green'], 166);
$this->assertInternalType('int', $color['blue']);
$this->assertEquals($color['blue'], 0);
// rgba color string // rgba color string
$color = $img->pickColor(799, 599, 'rgba'); $color = $img->pickColor(799, 599, 'rgba');
$this->assertInternalType('string', $color); $this->assertInternalType('string', $color);
@@ -1183,34 +1185,34 @@ class ImageTest extends PHPUnit_Framework_Testcase
$img->fill('rgb(255, 0, 0)'); $img->fill('rgb(255, 0, 0)');
$checkColor = $img->pickColor(50, 50,'array'); $checkColor = $img->pickColor(50, 50,'array');
$this->assertEquals($checkColor['red'], 255); $this->assertEquals($checkColor['r'], 255);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 0); $this->assertEquals($checkColor['a'], 1);
$img->rectangle('rgba(0,0,0,0.5)', 0, 0, 100, 100); $img->rectangle('rgba(0,0,0,0.5)', 0, 0, 100, 100);
$checkColor = $img->pickColor(50, 50,'array'); $checkColor = $img->pickColor(50, 50,'array');
$this->assertEquals($checkColor['red'], 128); $this->assertEquals($checkColor['r'], 128);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 0); $this->assertEquals($checkColor['a'], 1);
$img = new Image(null, 100, 100); $img = new Image(null, 100, 100);
$img->fill('rgba(0,0,0,0.5)'); $img->fill('rgba(0,0,0,0.5)');
$checkColor = $img->pickColor(50, 50,'array'); $checkColor = $img->pickColor(50, 50,'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 0); $this->assertEquals($checkColor['b'], 0);
$this->assertEquals($checkColor['alpha'], 64); $this->assertEquals($checkColor['a'], 0.5);
$img = new Image(null, 100, 100); $img = new Image(null, 100, 100);
$color = imagecolorallocatealpha($img->resource, 0, 0, 255, 60); $color = imagecolorallocatealpha($img->resource, 0, 0, 255, 60);
$img->fill($color); $img->fill($color);
$checkColor = $img->pickColor(50, 50,'array'); $checkColor = $img->pickColor(50, 50,'array');
$this->assertEquals($checkColor['red'], 0); $this->assertEquals($checkColor['r'], 0);
$this->assertEquals($checkColor['green'], 0); $this->assertEquals($checkColor['g'], 0);
$this->assertEquals($checkColor['blue'], 255); $this->assertEquals($checkColor['b'], 255);
$this->assertEquals($checkColor['alpha'], 60); $this->assertEquals($checkColor['a'], 0.53);
} }
public function testBrightnessImage() public function testBrightnessImage()