thinkphp5.1 图片处理类think-image的png 缩略,裁剪和添加水印透明度丢失的问题
官方的图片处理类处理png的时候,透明度会丢失
下面是解决办法
要修改的文件:
vendor/topthink/think-image/src/Image.php
缩略
要修改的方法
public function thumb($width, $height, $type = self::THUMB_SCALING)
按如下修改
// 调整默认颜色
$color = imagecolorallocate($img, 255, 255, 255);
// makalo 修改 缩略
$color = imagecolorallocatealpha($img, 0, 0, 0,127);
裁剪
要修改的方法
public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null)
按如下修改
// 调整默认颜色
//$color = imagecolorallocate($img, 255, 255, 255);
// makalo 修改 裁剪
$color = imagecolorallocatealpha($img, 0, 0, 0,127);
添加水印
注意:
添加水印需要将裁剪的方法一起修改,单独修改不行
只有png才有透明通道
要修改的方法
#按裁剪修改
public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null)
#水印
public function water($source, $locate = self::WATER_SOUTHEAST, $alpha = 100)
按如下修改
//imagecopymerge($this->im, $src, $x, $y, 0, 0, $info[0], $info[1], $alpha);
// makalo 修改 为了保持PNG的透明效果
imagecopy($this->im, $water, $x, $y, 0, 0, $info[0], $info[1]);