ID:               39273
 Updated by:       [EMAIL PROTECTED]
 Reported By:      seth at pricepages dot org
 Status:           Bogus
 Bug Type:         GD related
 Operating System: Mac 10.4
 PHP Version:      5.1.6
 Assigned To:      pajoye
 New Comment:

Pardon? What is a boolean transparency?

Please understand these three things:
- The transparent color is one *color*, an index for palette  based
image or 32bits value for truecolor images. It defines which color is
used as the *background* color (like white is   the background color of
a white paper).

- The *alpha* channel of a pixel defines how translucide the pixel has
to be. It has nothing to do with the transparent color.

- Your image has *no* transparent color but many pixels with various
*alpha* levels.

Load the result images in your favourite paint programs to see what I
mean. The area outside the line is translucide, it is due to the alpha
channel.



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

[2006-10-28 14:11:56] seth at pricepages dot org

But that has one of the bugs that I pointed out: boolean 
transparency. The original doesn't have that problem.

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

[2006-10-28 14:04:59] [EMAIL PROTECTED]

Use the code I just gave you, it does create the resized version (by
copying):
http://blog.thepimp.net/misc/39273_out.png




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

[2006-10-28 13:15:45] seth at pricepages dot org

I ran your code before I posted my last comment, but I still 
don't know what you are implying. The results are exactly as I 
expect them to be.

If this bug is bogus, please tell me how I can create an 
enlarged version of test.png? It isn't possible without 
applying a fix.

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

[2006-10-28 10:49:54] [EMAIL PROTECTED]

"I am aware that the image is fully black, except for 
variations in alpha. That is why this is a bug related to 
the alpha channel and not any other."

You are not aware that your image is *NOT* fully black.

Background color (the transparent color) is not the same than a color
with a ALPHA component. Please run the code I gave you, read the
results (like the values of the channels in these two pixels, or any
other).



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

[2006-10-27 17:22:07] seth at pricepages dot org

I am aware that the image is fully black, except for 
variations in alpha. That is why this is a bug related to 
the alpha channel and not any other.

Well, I went in and fixed it myself. The problem was in the 
function gdImageGetTrueColorPixel(). It assumed that palette 
images always have binary transparency, with a correct value 
in im->transparent. Because my source image didn't have a 
correct value in im->transparent, it was always marked as 
opaque.

This line:

return gdTrueColorAlpha(im->red[p], im->green[p], im->blue
[p], (im->transparent == p) ? gdAlphaTransparent : 
gdAlphaOpaque);

Needs to be changed to:

return gdTrueColorAlpha(im->red[p], im->green[p], im->blue
[p], (im->transparent == p) ? gdAlphaTransparent : im->alpha
[p]);

Making this patch also fixes the same bug in 
imagecopyresampled(), and who knows what else.


Although, I would recommend using gdTrueColorAlpha() at the 
appropriate point(s) in gdImageCopyResized() instead of 
gdImageGetTrueColorPixel(). This would eliminate an extra 
function call, branch, and color lookup.

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

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/39273

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

Reply via email to