ThinkPHP Image.class.php水印功能支持png原始透明

浏览:5342 最后更新:2015-01-19 13:19 分类:类库 关键字: thinkphp image water
今天开发公司项目的时候发现thinkphp的水印功能不支持png图片的原始透明,虽然支持png的透明度度处理但是去在图片原本的透明部分填充了白色,真的是令人蛋疼。 于是果断处理,发现thinkphp使用的是imagecopymerge函数,虽然imagecopymerge支持图片的透明处理但是却不保留png的原始透明度。于是果断改为先用imagecopy进行png图片拷贝然后用imagecopymerge,进行处理的方法,效果果然有效。
修改方法很简单,在image类里面添加一个imagecopymerge_alpha方法,随便找个位置加上下面的代码就可以了。
static function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
        $opacity=$pct;
        // getting the watermark width
        $w = imagesx($src_im);
        // getting the watermark height
        $h = imagesy($src_im);
             
        // creating a cut resource
        $cut = imagecreatetruecolor($src_w, $src_h);
        // copying that section of the background to the cut
        imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
        // inverting the opacity
        //$opacity = 100 - $opacity;
             
        // placing the watermark now
        imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
        imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
    }
第二步用imagecopymerge_alpha替换原来的imagecopymerge处理,大约83行将
  

//生成混合图像
  imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha);
   
   替换为
  

//生成混合图像
  self::imagecopymerge_alpha($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha);

ok搞定,如果看不懂,或者觉得自己修改麻烦,那就直接复制下面的代码,替换Image.class.php内的所有代码
实在不想搞得,就直接下载覆盖官方的!
评论( 相关
后面还有条评论,点击查看>>