composter下载扩展:
https://packagist.org/packages/aliyuncs/oss-sdk-php
composer require topthink/think-image
加字体文件:
在window中的C:\Windows\Fonts找到一个字体文件,加到thinkphp项目的根目录(或public/static/中),尽量不要有中文路径
代码文件:water.php
<?php
namespace app\api\controller;
use think\Image;
use think\facade\Env;
class Water extends Base
{
/**
* 图片加水印 文字水印和图片水印 \think\Image类添加tilewater方法,平铺水印
*/
public function water()
{
//要加水印的图片
$image = \think\Image::open('image/xcx_code/a.png');
// 返回图片的宽度
$width = $image->width();
// 返回图片的高度
$height = $image->height();
// 返回图片的类型
$type = $image->type();
// 返回图片的mime类型
$mime = $image->mime();
// 返回图片的尺寸数组 0 图片宽度 1 图片高度
$size = $image->size();
//按照原图的比例生成一个最大为50*50的缩略图并保存为thumb.png
$image_shuiyin = \think\Image::open('image/xcx_code/2_qr_code.png'); //打开水印图片
$image_shuiyin = $image_shuiyin->thumb(50, 50)->save('image/xcx_code/2_qr_code.png'); //改变水印图片大小 50*50
//把图片转成圆形
$curcle_image = $this->curcle_image('image/xcx_code/2_qr_code.png', 'image/xcx_code/2_qr_code.png'); //把水印图片转成圆形,返回水印图片地址
$image->water($curcle_image, [350, 30], 100)->save($curcle_image); //加图片水印后保存为 water_image.png
//给图片加文字水印
$image = \think\Image::open($curcle_image); //打开 要加水印的图片
$image1 = $image->text('十年磨一剑 - 为API开发设计的高性能框架', Env::get('root_path').'public/static/HYQingKongTiJ.ttf', 20, '#000000', \think\Image::WATER_SOUTHEAST, 0, 50)->save('image/xcx_code/text.png'); //文字水印
$image1 = $image->text('十年磨两剑 - 为API开发设计的高性能框架,高性能框架,高性能框架', Env::get('root_path').'public/static/HYQingKongTiJ.ttf', 20, '#000000',[100,10], 0, 0)->save('image/xcx_code/text.png'); //文字水印
}
//把图片 处理圆形
public function curcle_image($url, $path = '../')
{
$w = 50;
$h = 50; // original size
$original_path = $url;
$dest_path = $path . uniqid() . '.png';
$src = imagecreatefromstring(file_get_contents($original_path));
$newpic = imagecreatetruecolor($w, $h);
imagealphablending($newpic, false);
$transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);
$r = $w / 2;
for ($x = 0; $x < $w; $x++)
for ($y = 0; $y < $h; $y++) {
$c = imagecolorat($src, $x, $y);
$_x = $x - $w / 2;
$_y = $y - $h / 2;
if ((($_x * $_x) + ($_y * $_y)) < ($r * $r)) {
imagesetpixel($newpic, $x, $y, $c);
} else {
imagesetpixel($newpic, $x, $y, $transparent);
}
}
imagesavealpha($newpic, true);
imagepng($newpic, $dest_path);
imagedestroy($newpic);
imagedestroy($src);
// unlink($url);
return $dest_path;
}
}