ok i have this function for adding a watermark on another image .. i got the image ... + the watermark and keeps giving me blank screen or that is done but actually nothing is done .. <?PHP function applyWatermark( $srcFilename, $dstFilename, $wtrFilename, $wtrTransparency ) { $use_gd = true ; $COMPOSITE= "0"; $gdInstalled = true; // input validation $wtrTransparency = (int) $wtrTransparency; if ( $wtrTransparency > 100 ) $wtrTransparency = 100; if ( !file_exists( $srcFilename ) ) return IMAGE_ERROR_SOURCE_NOT_EXISTS; if ( !file_exists( $wtrFilename ) ) return IMAGE_ERROR_SOURCE_NOT_EXISTS; // if destination and source filenames are equivalent then change mode for destination if ( $srcFilename == $dstFilename ) chmod( $dstFilename, 0666 ); if ( $use_gd ) { if ( !$gdInstalled ) return IMAGE_ERROR_GD_NOT_INSTALLED; $gdInfoArray = gd_info(); $size = getimagesize( $srcFilename ); $wtrSize = getimagesize( $wtrFilename ); // only GIF, JPG and PNG allowed switch ( $size[2] ) { case IMAGE_TYPE_GIF: if ( !$gdInfoArray['GIF Read Support'] || !$gdInfoArray['GIF Create Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $src_im = imagecreatefromgif( $srcFilename ); break; case IMAGE_TYPE_JPG: if ( !$gdInfoArray['JPG Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $src_im = imagecreatefromjpeg( $srcFilename ); break; case IMAGE_TYPE_PNG: if ( !$gdInfoArray['PNG Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $src_im = imagecreatefrompng( $srcFilename ); break; default: return IMAGE_ERROR_WRONG_TYPE; } switch ( $wtrSize[2] ) { case IMAGE_TYPE_GIF: if ( !$gdInfoArray['GIF Read Support'] || !$gdInfoArray['GIF Create Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $wtr_im = imagecreatefromgif( $wtrFilename ); break; case IMAGE_TYPE_JPG: if ( !$gdInfoArray['JPG Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $wtr_im = imagecreatefromjpeg( $wtrFilename ); break; case IMAGE_TYPE_PNG: if ( !$gdInfoArray['PNG Support'] ) return IMAGE_ERROR_GD_TYPE_NOT_SUPPORTED; $wtr_im = imagecreatefrompng( $wtrFilename ); break; default: return IMAGE_ERROR_WRONG_TYPE; } if ( !$src_im || !$wtr_im ) return IMAGE_ERROR_GD_OPEN_FAILED; $watermarkX = ($size[0] - $wtrSize[0]) / 2; $watermarkY = $size[1] - $wtrSize[1]; $mergeResult = imagecopymerge( $src_im, $wtr_im, $watermarkX, $watermarkY, 0, 0, $wtrSize[0], $wtrSize[1], $wtrTransparency ); if ( !$mergeResult ) return IMAGE_ERROR_GD_MERGE_ERROR; switch ( $size[2] ) { case IMAGE_TYPE_GIF: $writeResult = imagegif( $src_im, $dstFilename ); break; case IMAGE_TYPE_JPG: $writeResult = imagejpeg( $src_im, $dstFilename ); break; case IMAGE_TYPE_PNG: $writeResult = imagepng( $src_im, $dstFilename ); break; } // free memory imagedestroy( $src_im ); imagedestroy( $wtr_im ); if ( $writeResult ) return IMAGE_ERROR_SUCCESS; else return IMAGE_ERROR_GD_WRITE_FAILED; } else { $imgTransparency = 100 - $wtrTransparency; $cmd = "$COMPOSITE -gravity \"South\" -dissolve $imgTransparency $wtrFilename -dissolve $wtrTransparency $srcFilename $dstFilename"; @exec( $cmd ); if ( file_exists($dstFilename) ) return IMAGE_ERROR_SUCCESS; else return IMAGE_ERROR_IMAGEMAGICK_ERROR; } } $srcfile = './pic.jpg' ; $logo = './watermark.png' ; $srcfile2= './pic2.jpg'; $tr = '10'; applyWatermark( $srcfile, $srcfile,$logo, $tr ); echo "done" ; ?> Code (markup):
I noticed an interesting comment on the PHP manual page for imagecopymerge. Apparently, it can't handle the alpha channel in PNGs, so someone wrote a function to fix it. http://au.php.net/manual/en/function.imagecopymerge.php#88456