Hi Ash, Thanks for your suggestion. Unfortunately,that did not help but i've found a post via Google which gave a simple (and slightly counter-intuitive) solution - replace imagecopymerge($img2, $img, $yoffset, 5, 0, 0, imagesx($img), imagesy($img), 100); with imagecopy($img2, $img, $yoffset, 5, 0, 0, imagesx($img), imagesy($img)); And it works :) It seems imagecopymerge does not work well with PNGs and Alpha Channels. Many thanks for your help, Alex On Sat, Dec 12, 2009 at 11:20 AM, Ashley Sheridan <ash@xxxxxxxxxxxxxxxxxxxx>wrote: > On Sat, 2009-12-12 at 05:02 +0000, Alex Davies wrote: > > Hi All, > > I apologise if this is a newbie post; i'm new to transparent graphics > (PNGs in my case). > > I have a transparent PNG on disk, which I want PHP to load into memory > and add some text to ("watermarking", I guess). This seems to be what > is achieved @ http://php.ca/manual/en/image.examples.merged-watermark.php > > I have taken the following code almost entirely from the manual, but > can not understand what I have done wrong: > > <snip> > //Create the image > $img = @imagecreatetruecolor($width, $height) > or die("Cannot Initialize new GD image stream"); > > //Make it transparent > imagesavealpha($img, true); > $trans_colour = imagecolorallocatealpha($img, 0, 0, 0, 127); > imagefill($img, 0, 0, $trans_colour); > > //Get the text color > $text_color = imagecolorallocate($img, 255, 0, 0); > > //Draw the string > imagestring($img, $font_size, 0, 0, $string, $text_color); > > // Load background image, find position, print > $img2 = imagecreatefrompng('xxx.png'); > $yoffset = (imagesx($img2)/2) - (imagesx($img)/2); > imagecopymerge($img2, $img, $yoffset, 5, 0, 0, imagesx($img), > imagesy($img), 100); > > // Output the merged images > header ("Content-type: image/png"); > imagepng($img2); > </snip> > > This code prints the background image with transparancy removed with a > light grey, and the text image in red on a black background in the > correct position. > If I change it to imagepng($img), the text image is printed correctly > (transparency and all) > > Suggestions appreciated, i'm lost! > > Many thanks, > > Alex > > > > The only thing I can obviously see is that you've told it to ignore > transparency on $img2 by not asking it to preserve it (the default is to > ignore). PNG doesn't handle transparency in the same way a GIF does, each > pixel can have a varying degree of opacity, which allows whatever is beneath > it to show through. Add the imagesavealpha($img, true); line for $img2 and > see what that does for you. > > > Thanks, > Ash > http://www.ashleysheridan.co.uk > > > -- Alex Davies This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the sender immediately by e-mail and delete this e-mail permanently.