我们经常能在图片上看到一些水印,一般分为图片、文字或者是两种一起的结合。那为什么要加水印呢?目的是为了防止别人盗图、造假或者标注出处等,保护图片原作者的著作权或是劳动成果。那么给图片加水印就非常有必要了。
怎么用PHP实现给图片加水印呢?
先来看看效果
使用GD库
使用GD库来实现效果
图像处理和 GD - 手册
正所谓授人以鱼不如授人以渔,光贴代码不讲实现过程的,都是耍流氓。所以下面我会写功能的实现过程、过程所需要用到的函数。
内容基本都是干货,需要用到的时候可以方便查阅资料
关键函数
下面是php实现两种水印方式的关键函数:
imagettftext 用 TrueType 字体向图像写入文本
两种水印的实现方式
图片水印
准备两张图片
原图
水印图
实现过程
在php中加载这两张图片,得到一个图像资源数据类型。
根据不同的图片格式,使用对应函数
它们甚至可以加载一张来自网上的图片
可能你会需要将水印图进行缩小或放大(如果不需要,可以跳过这一步)
等比例缩放
计算缩放比例,根据想要缩放到的值(比如一张宽度是500px的图片,想缩小成50px)
计算缩放之后的宽高
创建一个新的图像资源(新图像的宽高等于缩放之后的宽高)
imagecreatetruecolor 新建一个真彩色图像
拷贝部分图像并调整大小
imagecopyresized 拷贝部分图像并调整大小
参数说明(为了方便理解,我对参数进行了语义化)
imagecopyresized(目标图像资源, 原图资源, 粘到目标图像的起始水平坐标, 粘到目标图像的起始垂直坐标, 拷贝原图的起始水平坐标, 拷贝原图的起始垂直坐标, 最终想要的宽度, 最终想要的高度, 原图的宽度, 原图的高度);
使用imagecopymerge函数,拷贝水印图并合并到原图中。
简单分析形参都有哪些(为了方便理解,我对参数进行了语义化)
imagecopymerge(原图资源, 水印图资源, 水印水平坐标, 水印垂直坐标, 拷贝水印图的起始水平坐标, 拷贝水印图的起始垂直坐标, 要拷贝的宽度, 要拷贝的高度, 水印透明度);
水印透明度:透明度范围是0-100
输出图像
函数关键字image+图片格式 更多查看官方手册
imagejpeg 输出图象到浏览器或文件。
imagepng
imagegif
imagewbmp
...
如果要输出到浏览器中,需要设置content-type头部
header - 手册 发送原生 HTTP 头
文字水印
简单分析形参都有哪些(为了方便理解,我对参数进行了语义化)
imagettftext(图像资源, 文字尺寸, 文字角度, 文字水平坐标, 文字垂直坐标, 文字颜色, 字体, 文本文字)
文字尺寸
GD库版本是1时,单位是像素(px),版本是2时,单位是点/磅(pt)
px,pt,em换算表
文字水平垂直基点位置
字符的左下角为基本点
文字颜色
字体
字体的绝对路径
其他参考
如果这对你有帮助,或者能帮你节省一些时间,不如,点个赞吧~