用Image类给透明背景图片添加文字丢失透明背景的解决办法

今天用Image类给一个透明背景的png添加文字水印,结果保存后的图片透明背景变白色了,然后就找资料学习,线分享如下:
版本:thinkphp 3.2
前提:采用的Gd库
找到Gd.class.php文件, 路径:ThinkPHP/Library/Think/Image/Driver/Gd.class.php
将类中的save方法替换如下:

  1. /**
  2.      * 保存图像
  3.      * @param  string  $imgname   图像保存名称
  4.      * @param  string  $type      图像类型
  5.      * @param  integer $quality   图像质量     
  6.      * @param  boolean $interlace 是否对JPEG类型图像设置隔行扫描
  7.      */
  8.     public function save($imgname, $type = null, $quality=80,$interlace = true){
  9.         if(empty($this->img)) E('没有可以被保存的图像资源');
  10.  
  11.         //自动获取图像类型
  12.         if(is_null($type)){
  13.             $type = $this->info['type'];
  14.         } else {
  15.             $type = strtolower($type);
  16.         }
  17.         //保存图像
  18.         if('jpeg' == $type || 'jpg' == $type){
  19.             //JPEG图像设置隔行扫描
  20.             imageinterlace($this->img, $interlace);
  21.             imagejpeg($this->img, $imgname,$quality);
  22.         }elseif('gif' == $type && !empty($this->gif)){
  23.             $this->gif->save($imgname);
  24.         }else{
  25.             // 保存透明色
  26.             imagesavealpha($this->img, true);
  27.             $fun  =   'image'.$type;
  28.             $fun($this->img, $imgname);
  29.         }
  30.     }

复制代码

 

仅仅在上面代码的26行,添加了如下代码:

  1. // 保存透明色
  2. imagesavealpha($this->img, true);

复制代码

 

分享给有同样需求的童鞋们,有什么不良反应,请大家指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值