|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #22323 There's no way to output transparent truecolor PNG images
Submitted: 2003-02-20 04:24 UTC Modified: 2004-01-01 21:00 UTC
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: jukkaho at mail dot student dot oulu dot fi Assigned: pajoye (profile)
Status: Closed Package: GD related
PHP Version: 4.3.0 OS: Linux
Private report: No CVE-ID: None
 [2003-02-20 04:24 UTC] jukkaho at mail dot student dot oulu dot fi
Alpha channel in a truecolor image is only sent when im->saveAlphaFlag is true.

It is by default set to false in gdImageCreateTrueColor() and there are no callers to gdImageSaveAlpha() to set it to any other value.

I tested a hack where I call gdImageSaveAlpha() in PHP_FUNCTION(imagealphablending) and it worked mostly as expected. I'd guess that another function call is needed unless is it made to default behaviour and calls are embedded in PHP_FUNCTION(imagepng) etc.

Only weird things that occured were that for some reason, target image alpha channel is discarded when blending other images to it.

For example when blending fully transparent part over another fully transparent part resulted in a white area. White comes from destination image that's transparent too.

Maybe I should open another bug for it?


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2003-02-20 08:13 UTC] jukkaho at mail dot student dot oulu dot fi
Relevant parts are not changed in CVS so there are still no way to call gdImageSaveAlpha() with a true argument so that alpha channel is actually sent to browser.

Default value is still set to 0 and has the following comment:

/* 2.0.2:
   alpha blending is now on by default, and saving of 
   alpha is off by default. This allows font 
   antialiasing to work as expected on the first try 
   in JPEGs -- quite important -- and also allows
   for smaller PNGs when saving of alpha channel is 
   not really desired, which it usually isn't! */

im->saveAlphaFlag = 0;

In my case it really is desired. I want to be able to produce transparent PNGs. I just don't have access in PHP to change saveAlphaFlag value.

Someone could just create a new PHP image function ImageSaveAlpha($im,$bool) that passes that info to gdImageSaveAlpha (gdImagePtr im, int saveAlphaArg);

I have solved my blending problems already by using undocumented functions as I have described in bug #22327.
 [2003-02-20 23:49 UTC] jukkaho at mail dot student dot oulu dot fi
I have submitted a proposed patch to the development mailing list (see When everything's ok in cvs snapshot, this bug is closed.

There's no state 'should be fixed in cvs' so this stays open. :)
 [2003-02-26 17:24 UTC]
This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at
In case this was a documentation problem, the fix will show up soon at

In case this was a website problem, the change will show
up on the site and on the mirror sites in short time.
Thank you for the report, and for helping us make PHP better.

imagesavealpha has been added in cvs.

The simple imagesavealpha wrapper is used.


$im = imagecreatetruecolor(200,200);
imagealphablending($im, false);
imagesavealpha($im, true);
imagefilledrectangle($im,20,20,150,150, 0x40FF0000);
imagepng($im, 'alpha.png');

thank's for your report

 [2003-12-22 15:55 UTC] jukkaho at mail dot student dot oulu dot fi
I'm sorry, but this bug needs to be reopened.

With current (stable) PHP version 4.3.3 with GD lib  	bundled (2.0.15 compatible), I'm unable to create transparent png images.

Usage example in previous comment does _not_ work any more and result image has black background with no alpha information.
 [2004-01-01 21:00 UTC]
But the latest stable version is the latest STABLE CVS snapshot in which this works fine.

PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun May 26 13:01:32 2024 UTC