PHP实现图片水印功能

一、什么是水印

所谓数字水印是向数据多媒体(如图像、声音、视频信号等)中添加某些数字信息以达到文件真伪鉴别、版权保护等功能。

二、水印功能

  • 真伪鉴别
  • 版权保护
  • 防盗链

三、水印图像实现

  • 通过PS等设计软件,进行设计实现
  • 通过PHP等编程语言来设计实现

四、水印实现原理图

  • 文字水印(验证码)
  • 图片水印:把一张图片嵌入在另一张图片中

五、水印制作五步走

第一步:获取目标图片资源(原图像),imagecreatefrom(jpeg|gif|png)
第二步:获取水印图片资源(水印图像),imagecreatefrom(jpeg|gif|png)
第三步:采样合并

要使用到的知识点:
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
参数说明:
$dst_im :目标图片资源(原图像)
$src_im :水印图片资源(水印图)
$dst_x :水印图片在原图像中的位置(横坐标)
$dst_y :水印图片在原图像中的位置(纵坐标)
$src_x :取样水印图片的位置(横坐标)
$src_y :取样水印图片的位置(纵坐标)
$src_w :水印图片的宽度
$src_h :水印图片的高度
$pct :透明度,0-100,0代表全透明,100代表不透明,0-100之间代表半透明
功能:imagecopymerge — 拷贝并合并图像的一部分

第四步:保存图片资源
第五步:销毁图片资源

六、水印图具体实现

//1、获取目标图片资源(原图)
$dst = imagecreatefromjpeg('girl.jpg');
//2、获取水印图片资源(水印图)
$src = imagecreatefromjpeg('water.jpg');
//3、采样合并
imagecopymerge($dst, $src, 0, 0, 0, 0, 105, 45, 50);
//4、保存图片资源
imagejpeg($dst,'water_girl.jpg');
//5、销毁图片资源
imagedestroy($src);
imagedestroy($dst);

扩展:可以定制水印图像的位置(左上角、右上角、左下角、右下角、居中位置)

左上角:横坐标0,纵坐标0
右上角:纵坐标0,横坐标(原图宽度-水印图片宽度)
左下角:横坐标0,纵坐标(原图高度-水印图片高度)
右下角:横纵坐标都是使用原图-水印图宽高
居中位置:
横坐标 :ceil((原图宽度-水印图宽度)/2)
纵坐标 :ceil((原图高度-水印图高度)/2)