修正

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

/

php水印混色thinkphp5图片水印的自顺应办法 Webpack

添加水印

@param string $source 水印图片路径

@param int $locate 水印位置

@param int $alpha 透明度

@return $this

/

public function water($source, $locate = self::WATER_SOUTHEAST, $alpha = 100)

{

if (!is_file($source)) {

throw new ImageException('水印图像不存在');

}

//获打水印图像信息

$info = getimagesize($source);

if (false === $info || (IMAGETYPE_GIF === $info[2] && empty($info['bits']))) {

throw new ImageException('造孽水印文件');

}

//创建水印图像资源

$fun = 'imagecreatefrom' . image_type_to_extension($info[2], false);

$water = $fun($source);

$b = $info[0]/$this->info['width'];

if ($b<1) {

$b = 1;

}

$croped=imagecreatetruecolor($this->info['width'], $this->info['height']); //新建一个真彩色图像

$color = imagecolorallocatealpha($croped, 0, 0, 0,127);

imagefill($croped, 0, 0, $color);

imagecopyresized($croped, $water, 0, ($this->info['height']-$info[1]/$b)/2, 0, 0,$info[0]/$b, $info[1]/$b,$info[0], $info[1]); //拷贝图像的一部分

imagesavealpha($croped, true);

$water = $croped;

$info[0]= $this->info['width'];

$info[1]= $this->info['height'];

// header("Content-Type:image/jpeg");

// imagejpeg($croped);

// die;

//设定水印图像的混色模式

imagealphablending($water, true);

/ 设定水印位置 /

switch ($locate) {

/ 右下角水印 /

case self::WATER_SOUTHEAST:

$x = $this->info['width'] - $info[0];

$y = $this->info['height'] - $info[1];

break;

/ 左下角水印 /

case self::WATER_SOUTHWEST:

$x = 0;

$y = $this->info['height'] - $info[1];

break;

/ 左上角水印 /

case self::WATER_NORTHWEST:

$x = $y = 0;

break;

/ 右上角水印 /

case self::WATER_NORTHEAST:

$x = $this->info['width'] - $info[0];

$y = 0;

break;

/ 居中水印 /

case self::WATER_CENTER:

$x = ($this->info['width'] - $info[0]) / 2;

$y = ($this->info['height'] - $info[1]) / 2;

break;

/ 下居中水印 /

case self::WATER_SOUTH:

$x = ($this->info['width'] - $info[0]) / 2;

$y = $this->info['height'] - $info[1];

break;

/ 右居中水印 /

case self::WATER_EAST:

$x = $this->info['width'] - $info[0];

$y = ($this->info['height'] - $info[1]) / 2;

break;

/ 上居中水印 /

case self::WATER_NORTH:

$x = ($this->info['width'] - $info[0]) / 2;

$y = 0;

break;

/ 左居中水印 /

case self::WATER_WEST:

$x = 0;

$y = ($this->info['height'] - $info[1]) / 2;

break;

default:

/ 自定义水印坐标 /

if (is_array($locate)) {

list($x, $y) = $locate;

} else {

throw new ImageException('不支持的水印位置类型');

}

}

do {

//添加水印

$src = imagecreatetruecolor($info[0], $info[1]);

// 调度默认颜色

$color = imagecolorallocate($src, 255, 255, 255);

imagefill($src, 0, 0, $color);

imagecopy($src, $this->im, 0, 0, $x, $y, $info[0], $info[1]);

imagecopy($src, $water, 0, 0, 0, 0, $info[0], $info[1]);

imagecopymerge($this->im, $src, $x, $y, 0, 0, $info[0], $info[1], $alpha);

// header("Content-Type:image/jpeg");

// imagejpeg($this->im);

// die;

//销毁零时图片资源

imagedestroy($src);

} while (!empty($this->gif) && $this->gifNext());

//销毁水印资源

imagedestroy($water);

return $this;

}

发布日期:2020/07/24 分类:技能分享 关键字: thinkphp5 图片水印 自适应

只会写代码,不会谈天的直男。

zmq2088 小程序 公众年夜众号 企业官网 商城 CRM 等多种系统开拓。