ID:               40158
 Updated by:       [EMAIL PROTECTED]
 Reported By:      henus at mail dot ru
 Status:           Analyzed
 Bug Type:         GD related
 Operating System: Windows XP
 PHP Version:      5.2.0
 Assigned To:      pajoye
 New Comment:

For the record, the imagefill bug is fixed in cvs, it will be in 5.2.1
.


Previous Comments:
------------------------------------------------------------------------

[2007-01-19 12:14:57] [EMAIL PROTECTED]

Ok, good, thanks for the test. I will disable alpha blending and
restore it on exit in imagefilter.

About the imagefill bug, it happens only with small images (< 4 pixels
large), thanks for the notice.

------------------------------------------------------------------------

[2007-01-19 12:11:56] henus at mail dot ru

Yes, it work

------------------------------------------------------------------------

[2007-01-19 12:04:39] henus at mail dot ru

Yes

------------------------------------------------------------------------

[2007-01-19 12:02:41] [EMAIL PROTECTED]

Can you *PLEASE* confirm that it works when you disable alpha blending?
Answer should be Yes or No, I got the details already. I really do not
have the time to explain/ask again and again the same thing.

About imagefill, yes, that's a bug. Please open a new one if you like.
I will fix it as soon as possible.

------------------------------------------------------------------------

[2007-01-19 11:53:03] henus at mail dot ru

Yes, the is global problem with alphablending in libgd\gd.c

but about "imagealphablending($mask, false); //<<< Important!":
i absolutely should not care about ebabling\disabling
imagealphablending before imagefilter, 
because of function shoud colorize image by new values of red,gree,blue

(!!!there is no alpha in parameters)

if IMG_FILTER_COLORIZE will have in parameters alpha,
if alphablending enable, value of alpha should allow for calculation of
new color values
(in gdImageColor it will before new_pxl =
gdImageColorAllocateAlpha(src, (int)r, (int)g, (int)b, a);)
and gdImageSetPixel shoul with disabled alphablending.


otherwise function work like merging of two images with alphablending.
where:
first image - source image from function parameters.
second image - correct colorized copy of source image.

it is not logically. it is incorrect.


another bug in imagefill:
this function not only fill image, it is also disable alphablending.
php example:

<?
/* first colorizing */
$im1=imagecreatetruecolor(1,1);
imagealphablending($im1, TRUE);
$c01=imagecolorallocatealpha($im1,255,0,0,63);
imagefill($im1,0,0,$c01);
$c01=imagecolorsforindex($im1,imagecolorat($im1,0,0));
imagefilter($im1, IMG_FILTER_COLORIZE, -255, 255, 0);
$c1=imagecolorsforindex($im1,imagecolorat($im1,0,0));

/* second colorizing */
$im2=imagecreatetruecolor(1,1);
imagealphablending($im2, TRUE);
$c02=imagecolorallocatealpha($im2,255,0,0,63);
imagefill($im2,0,0,$c02);
$c02=imagecolorsforindex($im1,imagecolorat($im1,0,0));
/* att!!! after imagefill another enabling alphablending */
imagealphablending($im2, TRUE);
imagefilter($im2, IMG_FILTER_COLORIZE, -255, 255, 0);
$c2=imagecolorsforindex($im2,imagecolorat($im2,0,0));

print"<br>before 1 - ";
print_r($c01);
print"<br>after  1 - ";
print_r($c1);
print"<br><br>before 2 - ";
print_r($c02);
print"<br>after  2 - ";
print_r($c2);
?>

results:
before 1- Array ( [red] => 255 [green] => 0 [blue] => 0 [alpha] => 63 )

after  1 - Array ( [red] => 0 [green] => 255 [blue] => 0 [alpha] => 63
) 

before 2- Array ( [red] => 0 [green] => 255 [blue] => 0 [alpha] => 63 )

after  2 - Array ( [red] => 126 [green] => 128 [blue] => 0 [alpha] =>
31 )

where:
after 1 - correct result of IMG_FILTER_COLORIZE, because of imagefill
disable alphablending
after 2 - incorrect result of IMG_FILTER_COLORIZE, because of after
imagefill i manually enable alphablending


disabling alphablending in code it is good solutions for gdImageColor,
but after it is necessary to restore old value of alphaBlendingFlag.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/40158

-- 
Edit this bug report at http://bugs.php.net/?id=40158&edit=1

Reply via email to