]> granicus.if.org Git - php/commitdiff
Fixed bug #61221 - imagegammacorrect function loses alpha channel
authorChristoph M. Becker <cmbecker69@gmx.de>
Sat, 6 Jun 2015 12:57:38 +0000 (14:57 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 17 Jun 2015 00:15:59 +0000 (02:15 +0200)
When applying imagegammacorrect() the alpha channel is now fully retained, instead of being completely lost.

ext/gd/gd.c
ext/gd/tests/bug61221.phpt [new file with mode: 0644]

index 76e2c5bf55288f888367d0f40cc630d396df7952..405229e4eeefd6fe562ecd19d6adde905daa99eb 100644 (file)
@@ -3045,10 +3045,11 @@ PHP_FUNCTION(imagegammacorrect)
                        for (x = 0; x < gdImageSX(im); x++)     {
                                c = gdImageGetPixel(im, x, y);
                                gdImageSetPixel(im, x, y,
-                                       gdTrueColor(
+                                       gdTrueColorAlpha(
                                                (int) ((pow((pow((gdTrueColorGetRed(c)   / 255.0), input)), 1.0 / output) * 255) + .5),
                                                (int) ((pow((pow((gdTrueColorGetGreen(c) / 255.0), input)), 1.0 / output) * 255) + .5),
-                                               (int) ((pow((pow((gdTrueColorGetBlue(c)  / 255.0), input)), 1.0 / output) * 255) + .5)
+                                               (int) ((pow((pow((gdTrueColorGetBlue(c)  / 255.0), input)), 1.0 / output) * 255) + .5),
+                                               gdTrueColorGetAlpha(c)
                                        )
                                );
                        }
diff --git a/ext/gd/tests/bug61221.phpt b/ext/gd/tests/bug61221.phpt
new file mode 100644 (file)
index 0000000..42365da
--- /dev/null
@@ -0,0 +1,23 @@
+--TEST--
+Bug #61221 - imagegammacorrect function loses alpha channel
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$imagew = 50;
+$imageh = 50;
+$img = imagecreatetruecolor($imagew, $imageh);
+$blacktransparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
+$redsolid = imagecolorallocate($img, 255, 0, 0);
+imagefill($img, 0, 0, $blacktransparent);
+imageline($img, $imagew / 2, 0, $imagew / 2, $imageh - 1, $redsolid);
+imageline($img, 0, $imageh / 2, $imagew - 1, $imageh / 2, $redsolid);
+imagegammacorrect($img, 1, 1);
+$color = imagecolorat($img, 0, 0);
+var_dump($color === $blacktransparent);
+imagedestroy($img);
+?>
+--EXPECT--
+bool(true)