当我们辛辛苦苦写出一篇文章并为其配上精美的图片,并准备在互联网上分享时,这就得注意了,有可能你精心准备的图片将成为别人唾手可得的免费资源。如果是在自己的服务器搭建博客发布文章,就得更加小心了,一不小心就成为采集工具的长期饭票,看似增加了访问量,但并不是真正的访问量,而且如果采集者直接采集的图片地址,那么你就免费给别人打工了,无效的访问量不说,还免费提供图片,浪费服务器资源,给别人做嫁妆。于是,防盗链、加水印、禁止跨域等手段出现了,鉴于此,本文只简单的介绍通过php给图片加水印。
1.环境:
服务器:linux,
php:7.1 开启gd库,gd库版本2.1
php框架:tp5.1
2.准备工作:
通过composer下载thinkphp的图像扩展(不写原生 ,tp的图像处理在原生基础上封装了。)
composer require topthink/think-image
操作完成之后将会在vendor目录下的topthink里面多一个 ‘think-image’目录
这是一个标准的第三方类库,在代码里面直接使用就可以了
ps:composer网上有很多教程,在此不再赘述
3.实现
3.1图片水印
在控制器里面
假设当前入口文件目录下面有一个img/200514ac73i7.png文件使用open方法打开
而水印文件为wt.jpg
$image = \think\Image::open('./image.png');
/* * 测试添加图片水印
* */
public function watermark(){
$image = \think\Image::open('img/200514ac73i7.png');
$image->water('wt.jpg',7)->save('img/200514ac73i7.png');
}
效果如下
在左下角已经添加了一张水印
water方法的第二个参数表示水印的位置,默认值是WATER_SOUTH,可以传入下列\think\Image类的常量或者对应的数字:
//常量,标识左上角水印
const WATER_NORTHWEST = 1;
//常量,标识上居中水印
const WATER_NORTH = 2;
//常量,标识右上角水印
const WATER_NORTHEAST = 3;
//常量,标识左居中水印
const WATER_WEST = 4;
//常量,标识居中水印
const WATER_CENTER = 5;
//常量,标识右居中水印
const WATER_EAST = 6;
//常量,标识左下角水印
const WATER_SOUTHWEST = 7;
//常量,标识下居中水印
const WATER_SOUTH = 8;
//常量,标识右下角水印
const WATER_SOUTHEAST = 9;
3.2文字水印
文字水印比较多,相关参数如下
参数 | 默认 | 描述 |
---|---|---|
text | 不能为空 | 添加的文字 |
font | 不能为空 | 字体文件路径 |
size | 不能为空 | 字号,单位是像素 |
color | #00000000 | 文字颜色 |
locate | WATER_SOUTHEAST | 文字写入位置 |
offset | 0 | 文字相对当前位置的偏移量 |
angle | 0 | 文字倾斜角度 |
/*
* 测试添加水印
* */
public function watermark(){
$image = \think\Image::open('b2.png');
$image->text('浅唱春天','static/font/pingfang.ttf',20,'#808080',7, [5,-5])->save('b.png');
}
效果如下