#45030 [Fbk->Opn]: Destination image alpah channle noise when using imagecopyresampled
| From: | lieyang at yahoo dot com | Date: | Sun, 18 May 2008 03:41:50 +0000 |
| Subject: | #45030 [Fbk->Opn]: Destination image alpah channle noise when using imagecopyresampled | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-125086@lists.php.net to get a copy of this message | ||
ID: 45030
User updated by: lieyang at yahoo dot com
Reported By: lieyang at yahoo dot com
-Status: Feedback
+Status: Open
Bug Type: GD related
Operating System: x86_64 GNU/Linux Kernel 2.6.9-4
PHP Version: 5.2.6
Assigned To: pajoye
New Comment:
Please try the following with different image sizes and you will see
that the alpha channel has noise.
(I have two original before and after images but can not find the link
to upload them as attachments)
$imageSrc = imagecreatetruecolor(90, 90);
imagealphablending($imageSrc, false);
imagesavealpha($imageSrc, true);
$color = imagecolorallocatealpha($imageSrc, 0, 0, 0, 127);
imagefill($imageSrc, 0, 0, $color);
$imageDst = imagecreatetruecolor(56, 56);
imagealphablending($imageDst, false);
imagesavealpha($imageDst, true);
imagecopyresampled($imageDst,$imageSrc, 0, 0, 0, 0, 56, 56, 90, 90);
header('Content-type: image/png');
imagepng($imageDst);
Previous Comments:
------------------------------------------------------------------------
[2008-05-17 23:11:41] rasmus@php.net
We need a better reproducible example here, including the source image.
When the source image has a perfect alpha channel, I see no noise. Try
this:
$imageSrc = imagecreatetruecolor(500, 500);
imagealphablending($imageSrc, false);
imagesavealpha($imageSrc, true);
$color = imagecolorallocatealpha($imageSrc, 0, 0, 0, 127);
imagefill($imageSrc, 0, 0, $color);
$imageDst = imagecreatetruecolor(50, 50);
imagealphablending($imageDst, false);
imagesavealpha($imageDst, true);
imagecopyresampled($imageDst,$imageSrc, 0, 0, 0, 0, 50, 50, 500, 500);
header('Content-type: image/png');
imagepng($imageDst);
------------------------------------------------------------------------
[2008-05-17 22:52:00] pajoye@php.net
In fact yes, I need the source image (what you have in $imageData).
Sorry for the double posts.
------------------------------------------------------------------------
[2008-05-17 22:48:55] pajoye@php.net
no need for src images :-)
------------------------------------------------------------------------
[2008-05-17 22:43:05] pajoye@php.net
Please provide me the source image and the result you get. You can use
http://bugs.libgd.org as well as you can add attachments to your
report.
------------------------------------------------------------------------
[2008-05-17 21:43:31] lieyang at yahoo dot com
Description:
------------
When resizing a 24 bit png image with imagecopyresampled, the
destination image alpha channel contains noise where it should be
completely transparent. When the re-sized image is displayed on Motorola
phones with only 4 levels of transparency,
the image shows many dark dots.
If we replace imagecopyresampled with imagecopyresized in the following
sample reproduce code, the problem goes away.
Reproduce code:
---------------
$imageSrc = imagecreatefromstring($imageData);
$imageDst = imagecreatetruecolor($width, $height);
imagealphablending($imageDst, false);
$color = imagecolorallocatealpha($imageDst, 0, 0, 0, 127);
imagefill($imageDst, 0, 0, $color);
imagesavealpha($imageDst, true);
imagecopyresampled($imageDst,$imageSrc, $dst_x, $dst_y, $src_x,
$src_y, $dst_w, $dst_h, $src_w, $src_h);
Expected result:
----------------
Completely transparent regions should still be completely transparent
in destination image.
Actual result:
--------------
Destination image alpha channel noise (some pixel values that should be
fully transparent have different value "2").
You can see the noise all over the transparent regions with any
graphics tools (for example, color selection with gimp).
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45030&edit=1