Edit report at https://bugs.php.net/bug.php?id=61221&edit=1
ID: 61221 Comment by: efbiaiinzinz at hotmail dot com Reported by: efbiaiinzinz at hotmail dot com Summary: imagegammacorrect function loses alpha channel Status: Open Type: Bug Package: GD related PHP Version: 5.4.0RC8 Block user comment: N Private report: N New Comment: In the original proposed patch, alpha shannel should not actually be modified by imagegammacorrect, only rgb should get multiplied. Sample test case to show alpha channel loss: <?php $imagew = 50; $imageh = 50; //truecolor means color allocations just combine ARGB into one integer value $img = imagecreatetruecolor($imagew, $imageh); //make sure alpha gets stored imagesavealpha($img, true); $blacktransparent = imagecolorallocatealpha($img, 0, 0, 0, 127); $redsolid = imagecolorallocate($img, 255, 0, 0); //fill with transparent black background imagefill($img, 0, 0, $blacktransparent); //draw solid red cross over the image for contrast imageline($img, $imagew / 2, 0, $imagew / 2, $imageh - 1, $redsolid); imageline($img, 0, $imageh / 2, $imagew - 1, $imageh / 2, $redsolid); //execute imagecammacorrect with same input-/output gamma values so that colors should actually remain same imagegammacorrect($img, 1, 1); //ask top-left corner color, for truecolor it is ARGB combined into one integer value $color = imagecolorat($img, 0, 0); //correct result should be same black-based transparent color that we used for filling echo $color === $blacktransparent ? 'ok' : 'failure'; //comment the echo line above and uncomment the two lines below to see visually how transparent color gets changed to solid black //header('Content-Type: image/png'); //imagepng($img); imagedestroy($img); Previous Comments: ------------------------------------------------------------------------ [2012-03-01 14:56:41] efbiaiinzinz at hotmail dot com Description: ------------ When issuing imagegammacorrect function on an image resource that has alpha channel, the alpha channel gets lost. I looked at the source of 5.4.0RC8 and have also made a minor patch that adds alpha channel support by modifying the ext/gd/gd.c file. Test script: --------------- $img = imagecreatefrompng('input.png'); imagegammacorrect($img, 1.0, 1.0); imagepng($img, 'result.png'); Expected result: ---------------- I would expect to see output.png retain its alpha channel. Actual result: -------------- The result file does not have any transparency, since the current source code indeed does not do gamma correction to alpha channel. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61221&edit=1