PHP Classes

File: PHP_toolbucket/SoftMoon/imagecopymerge_alpha.php

Recommend this page to a friend!
  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: 11 years ago
Size: 2,439 bytes


Class file image Download

// 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
// 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));
$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));
$dst_pixel['alpha']*$tf/127 );
imagealphablending($dst_im, FALSE);
imagesetpixel($dst_im, $dst_x+$x, $dst_y+$y, $pixel);
imagecolordeallocate($dst_im, $pixel); } } }