图片加水印 批量加文字

兼容thinkphp的image 也可以用 composer require tp5er/images

代码如下 

$image = new \tp5er\Images\Image(); //QQ496631085

$image->open('.' . $upload['path']); //打开图片

$width = $image->width(); // 返回图片的宽度

$height = $image->height(); // 返回图片的高度

// var_dump($width ,$height);

 

$font = './public/uploads/font/1014be1a527bfbaa081b2810832e737e.ttc'; //水印字体路径

$font_color = config('water_color') ?: '#3C3C1C66'; //水印字颜色

$font_size = 10; //水印字体大小

$text = config('water_text'); //水印文字

 

$size = $this->get_text_size($text, $font, 30);

$w = $size['w'];

$h = $size['h'];

for ($w_i = 0; $w_i <= $image->width() / $w; $w_i++) {

for ($h_i = 0; $h_i <= $image->height() / $h; $h_i++) {

//循环加入文字水印

$image->text($text, $font, $font_size, $font_color, [$w_i * ($w + 20), $h_i * ($h + 20)], 0, 15);

}

}

$image->save('.' . $upload['path']); //保存文件

 


 

/**

* 图像添加文字

*

* @param string $text 添加的文字

* @param string $font 字体路径

* @param integer $size 字号

*

* @return $this

* @throws ImageException

*/

public function get_text_size($text, $font, $size)

{

if (!is_file($font)) {

throw new ImageException("不存在的字体文件:{$font}");

}

//获取文字信息

$info = imagettfbbox($size, 0, $font, $text);

$minx = min($info[0], $info[2], $info[4], $info[6]);

$maxx = max($info[0], $info[2], $info[4], $info[6]);

$miny = min($info[1], $info[3], $info[5], $info[7]);

$maxy = max($info[1], $info[3], $info[5], $info[7]);

/* 计算文字初始坐标和尺寸 */

$x = $minx;

$y = abs($miny);

$w = $maxx - $minx;

$h = $maxy - $miny;

return ['w' => $w, 'h' => $h];

}

 

1679
主攻后端PHP
4660
二次开发Code
1679
长连接Swoole
4640
高并发网站Redis