ID: 39353
Updated by: [EMAIL PROTECTED]
Reported By: seth at pricepages dot org
-Status: Assigned
+Status: Bogus
Bug Type: GD related
Operating System: Mac 10.4
PHP Version: 5CVS-2006-11-02 (snap)
Assigned To: pajoye
New Comment:
"But if the alpha blending is set to false, you want to copy
the transparent pixels."
No, you do not want. Alpha channel and transparent color are two
different things. Alpha blending works with the alpha channel not with
the transparent color.
I closed this bug (bogus), reopen it if you think that I misunderstood
your problem.
Previous Comments:
------------------------------------------------------------------------
[2006-11-03 00:23:48] seth at pricepages dot org
Description:
------------
I'm not sure how many bugs are hidden here, but I thought
this should be submitted.
imagecopyresized() is ignoring alpha the blending mode.
Specifically, in ext/gd/libgd/gd.c line 2376 or so, there is
this code that skips processing transparent pixels:
tmp = gdImageGetPixel (src, x, y);
if (gdImageGetTransparent (src) == tmp) {
tox += stx[x - srcX];
continue;
}
But if the alpha blending is set to false, you want to copy
the transparent pixels. So commenting out this if statement
removes one bug. There is other similar code in this loop,
so maybe it should all be removed?
Unfortunately, all result pixels still opaque, when the
source image pixels are partially transparent. So this code
does not fix the problem.
Reproduce code:
---------------
<?php
$small = imagecreatefrompng(
'http://pricepages.org/temp/partialTrans.png');
$width = 300;
$height = 300;
$srcW = imagesx($small);
$srcH = imagesy($small);
$img = imagecreatetruecolor($width, $height);
$red = imagecolorresolve($img,255,0,0);
imagefill($img, 0,0, $red);
imagealphablending($img, false);
imagecopyresized($img, $small, 0,0, 0,0, $width, $height, $srcW,
$srcH);
header('Content-Type: image/png');
imagepng($img);
?>
Expected result:
----------------
The image is filled with red, and a partially transparent
black-and-white image is composited on top of it. Because
alpha blending is set to false, there should be no red showing
in the final image. (bug#1, squashed above)
Also, because the greyscale image should have partial
transparency, there should be a gradient between black and
red, but there is none. It is only black or only red. (bug#2)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=39353&edit=1