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

Reply via email to