兼容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];
}