Login   Register  
PHP Classes
elePHPant
Icontem

File: PHP_toolbucket/SoftMoon/imagecopymerge_alpha.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Joseph  >  Rainbow Maker  >  PHP_toolbucket/SoftMoon/imagecopymerge_alpha.php  >  Download  
File: PHP_toolbucket/SoftMoon/imagecopymerge_alpha.php
Role: Auxiliary script
Content type: text/plain
Description: PHP utility function
Class: Rainbow Maker
Create transparent gradient images
Author: By
Last change:
Date: 2012-02-12 21:43
Size: 2,439 bytes
 

Contents

Class file image Download
<?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_im00$dst_x$dst_y$src_w$src_h100);

        
// copying relevant section from watermark to the cut resource
        
imagecopy($dupl$src_im00$src_x$src_y$src_w$src_h);

        
// insert cut resource to destination image
        
imagecopymerge($dst_im$dupl$dst_x$dst_y00$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_imimagecolorat($src_im$x$y));
        
$dst_pixel=imagecolorsforindex($dst_imimagecolorat($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'] + $pct127));
        
imagealphablending($dst_imTRUE);
        
imagesetpixel($dst_im$dst_x+$x$dst_y+$y$pixel);
        
imagecolordeallocate($dst_im$pixel);
        
$int_pixel=imagecolorsforindex($dst_imimagecolorat($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_imFALSE);
        
imagesetpixel($dst_im$dst_x+$x$dst_y+$y$pixel);
        
imagecolordeallocate($dst_im$pixel);  }  }  }

?>