<?php 
 
// this will only handle alpha-transparency in the source image 
// transparency in the destination image where it is overlayed by the source will be lost... 
Function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)  { 
// lifted from Sina Salek’s comments on http://us.php.net/manual/en/function.imagecopymerge.php 
// modified adaption by SoftMoon WebWare 
/** 
    * PNG ALPHA CHANNEL SUPPORT for imagecopymerge(); 
    * by Sina Salek 
    * 
    * Bugfix by Ralph Voigt (bug which causes it 
    * to work only for $src_x = $src_y = 0. 
    * Also, inverting opacity is not necessary.) 
    * 08-JAN-2011 
    * 
    **/ 
    if (100==$pct) 
        imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h); 
    else  { 
 
        // creating a cut resource 
        $cut = imagecreatetruecolor($src_w, $src_h); 
 
        // copying relevant section from background to the cut resource 
        imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h, 100); 
 
        // copying relevant section from watermark to the cut resource 
        imagecopy($dupl, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 
 
        // insert cut resource to destination image 
        imagecopymerge($dst_im, $dupl, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
 
        imagedestroy($dupl);  }  } 
 
//  this will handle alpha-transparency in both the source and destination images 
Function imagecopymerge_alpha2($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)  { 
    $pct=round(127-($pct/100)*127);  //  0 <= $pct <= 100   convert opacity percentage to alpha-channel value 
    for ($x=0; $x<$src_w; $x++)  {  for ($y=0; $y<$src_h; $y++)  { 
        $src_pixel=imagecolorsforindex($src_im, imagecolorat($src_im, $x, $y)); 
        $dst_pixel=imagecolorsforindex($dst_im, imagecolorat($dst_im, $dst_x+$x, $dst_y+$y)); 
        $pixel=imagecolorallocatealpha($dst_im, 
            $src_pixel['red'], 
            $src_pixel['green'], 
            $src_pixel['blue'], 
            $tf=min($src_pixel['alpha'] + $pct, 127)); 
        imagealphablending($dst_im, TRUE); 
        imagesetpixel($dst_im, $dst_x+$x, $dst_y+$y, $pixel); 
        imagecolordeallocate($dst_im, $pixel); 
        $int_pixel=imagecolorsforindex($dst_im, imagecolorat($dst_im, $dst_x+$x, $dst_y+$y)); 
        $pixel=imagecolorallocatealpha($dst_im, 
            $int_pixel['red'], 
            $int_pixel['green'], 
            $int_pixel['blue'], 
            $dst_pixel['alpha']*$tf/127 ); 
        imagealphablending($dst_im, FALSE); 
        imagesetpixel($dst_im, $dst_x+$x, $dst_y+$y, $pixel); 
        imagecolordeallocate($dst_im, $pixel);  }  }  } 
 
?>
 
 |