官方的图片处理类处理png的时候,透明度会丢失,下面是解决办法。

  • 文件位置

    /vendor/topthink/think-image/src/Image.php

  • 修正 生成缩略图

      1. 找到方法:  
              public function thumb($width, $height, $type = self::THUMB_SCALING)
    
      2. 修改代码:
              // 调整默认颜色
              // $color = imagecolorallocate($img, 255, 255, 255);
              $color = imagecolorallocatealpha($img, 0, 0, 0,127);
    
  • 修正 裁剪图像

      1. 找到方法:  
              public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null)
    
      2. 修改代码:
              // 调整默认颜色
              // $color = imagecolorallocate($img, 255, 255, 255);
              $color = imagecolorallocatealpha($img, 0, 0, 0,127);
    
  • 修正 添加水印

    添加水印需要将裁剪的方法一起修改,单独修改不行
    只有png才有透明通道

      1. 找到方法:  
         public function water($source, $locate = self::WATER_SOUTHEAST, $alpha = 100)
    
      2. 修改代码:
         //imagecopymerge($this->im, $src, $x, $y, 0, 0, $info[0], $info[1], $alpha);
         imagecopy($this->im, $water, $x, $y, 0, 0, $info[0], $info[1]);
    





参考来源: https://www.copylian.com/technology/227.html