PHP 给图片制作水印的方法 Jayce PHP 762 1028天前 我们经常能在图片上看到一些水印,一般分为**图片**、**文字**或者是两种一起的结合。那为什么要加水印呢?目的是为了防止别人盗图、造假或者标注出处等,保护图片原作者的著作权或是劳动成果。那么给图片加水印就非常有必要了。 怎么用PHP实现给图片加水印呢? 先来看看效果  # 使用GD库 使用GD库来实现效果 [图像处理和 GD - 手册](http://php.net/manual/zh/book.image.php) 正所谓授人以鱼不如授人以渔,光贴代码不讲实现过程的,都是耍流氓。所以下面我会写功能的实现过程、过程所需要用到的函数。 > 内容基本都是干货,需要用到的时候可以方便查阅资料 ## 关键函数 下面是php实现两种水印方式的关键函数: - [**imagettftext**](http://php.net/manual/zh/function.imagettftext.php) 用 TrueType 字体向图像写入文本 - [**imagecopymerge**](http://php.net/manual/zh/function.imagecopymerge.php) 拷贝并合并图像的一部分 # 两种水印的实现方式 ## 图片水印 准备两张图片 - 原图 - 水印图 ### 实现过程 1. 在php中加载这两张图片,得到一个图像资源数据类型。 根据不同的图片格式,使用对应函数  > 它们甚至可以加载一张来自网上的图片 2. 读取图片宽高。 - [imagesx](http://php.net/manual/zh/function.imagesx.php) 取得图像宽度 - [imagesy](http://php.net/manual/zh/function.imagesy.php) 取得图像高度 - [getimagesize](http://php.net/manual/zh/function.getimagesize.php) 取得图像大小 - [getimagesizefromstring](http://php.net/manual/zh/function.getimagesizefromstring.php) 从字符串中获取图像尺寸信息 3. 可能你会需要将水印图进行缩小或放大(如果不需要,可以跳过这一步) 等比例缩放 1. 计算缩放比例,根据想要缩放到的值(比如一张宽度是500px的图片,想缩小成50px) 2. 计算缩放之后的宽高 3. 创建一个新的图像资源(新图像的宽高等于缩放之后的宽高) [imagecreatetruecolor](http://php.net/manual/zh/function.imagecreatetruecolor.php) 新建一个真彩色图像 4. 拷贝部分图像并调整大小 [imagecopyresized](http://php.net/manual/zh/function.imagecopyresized.php) 拷贝部分图像并调整大小 > 参数说明(为了方便理解,我对参数进行了语义化) imagecopyresized(目标图像资源, 原图资源, 粘到目标图像的起始水平坐标, 粘到目标图像的起始垂直坐标, 拷贝原图的起始水平坐标, 拷贝原图的起始垂直坐标, 最终想要的宽度, 最终想要的高度, 原图的宽度, 原图的高度); 4. 使用`imagecopymerge`函数,拷贝水印图并合并到原图中。 > 简单分析形参都有哪些(为了方便理解,我对参数进行了语义化) imagecopymerge(原图资源, 水印图资源, 水印水平坐标, 水印垂直坐标, 拷贝水印图的起始水平坐标, 拷贝水印图的起始垂直坐标, 要拷贝的宽度, 要拷贝的高度, 水印透明度); - 水印透明度:透明度范围是0-100 5. 输出图像 函数关键字`image+图片格式` 更多查看官方手册 - [imagejpeg](http://php.net/manual/zh/function.imagejpeg.php) 输出图象到浏览器或文件。 - imagepng - imagegif - imagewbmp - ... > 如果要输出到浏览器中,需要设置content-type头部 - [header - 手册](http://php.net/manual/zh/function.header.php) 发送原生 HTTP 头 - [常用对照表](http://tool.oschina.net/commons) 6. 释放图像资源 - [imagedestroy](http://php.net/manual/zh/function.imagedestroy.php) 销毁图像 ## 文字水印 简单分析形参都有哪些(为了方便理解,我对参数进行了语义化) > imagettftext(图像资源, 文字尺寸, 文字角度, 文字水平坐标, 文字垂直坐标, 文字颜色, 字体, 文本文字) - 文字尺寸 GD库版本是1时,单位是像素(px),版本是2时,单位是点/磅(pt) [px,pt,em换算表](http://www.runoob.com/w3cnote/px-pt-em-convert-table.html) - 文字水平垂直基点位置 字符的左下角为基本点 - 文字颜色 颜色索引,通过[imagecolorallocate](http://php.net/manual/zh/function.imagecolorallocate.php)函数创建 - 字体 字体的绝对路径 其他参考 - [绝对详解PHP 的imageTtfText()函数](https://blog.csdn.net/u012767761/article/details/73927728) 2018年06月26日 11:39 发布 打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮 喜欢 0 收藏 0 打赏 如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作! 本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
我们经常能在图片上看到一些水印,一般分为**图片**、**文字**或者是两种一起的结合。那为什么要加水印呢?目的是为了防止别人盗图、造假或者标注出处等,保护图片原作者的著作权或是劳动成果。那么给图片加水印就非常有必要了。 怎么用PHP实现给图片加水印呢? 先来看看效果  # 使用GD库 使用GD库来实现效果 [图像处理和 GD - 手册](http://php.net/manual/zh/book.image.php) 正所谓授人以鱼不如授人以渔,光贴代码不讲实现过程的,都是耍流氓。所以下面我会写功能的实现过程、过程所需要用到的函数。 > 内容基本都是干货,需要用到的时候可以方便查阅资料 ## 关键函数 下面是php实现两种水印方式的关键函数: - [**imagettftext**](http://php.net/manual/zh/function.imagettftext.php) 用 TrueType 字体向图像写入文本 - [**imagecopymerge**](http://php.net/manual/zh/function.imagecopymerge.php) 拷贝并合并图像的一部分 # 两种水印的实现方式 ## 图片水印 准备两张图片 - 原图 - 水印图 ### 实现过程 1. 在php中加载这两张图片,得到一个图像资源数据类型。 根据不同的图片格式,使用对应函数  > 它们甚至可以加载一张来自网上的图片 2. 读取图片宽高。 - [imagesx](http://php.net/manual/zh/function.imagesx.php) 取得图像宽度 - [imagesy](http://php.net/manual/zh/function.imagesy.php) 取得图像高度 - [getimagesize](http://php.net/manual/zh/function.getimagesize.php) 取得图像大小 - [getimagesizefromstring](http://php.net/manual/zh/function.getimagesizefromstring.php) 从字符串中获取图像尺寸信息 3. 可能你会需要将水印图进行缩小或放大(如果不需要,可以跳过这一步) 等比例缩放 1. 计算缩放比例,根据想要缩放到的值(比如一张宽度是500px的图片,想缩小成50px) 2. 计算缩放之后的宽高 3. 创建一个新的图像资源(新图像的宽高等于缩放之后的宽高) [imagecreatetruecolor](http://php.net/manual/zh/function.imagecreatetruecolor.php) 新建一个真彩色图像 4. 拷贝部分图像并调整大小 [imagecopyresized](http://php.net/manual/zh/function.imagecopyresized.php) 拷贝部分图像并调整大小 > 参数说明(为了方便理解,我对参数进行了语义化) imagecopyresized(目标图像资源, 原图资源, 粘到目标图像的起始水平坐标, 粘到目标图像的起始垂直坐标, 拷贝原图的起始水平坐标, 拷贝原图的起始垂直坐标, 最终想要的宽度, 最终想要的高度, 原图的宽度, 原图的高度); 4. 使用`imagecopymerge`函数,拷贝水印图并合并到原图中。 > 简单分析形参都有哪些(为了方便理解,我对参数进行了语义化) imagecopymerge(原图资源, 水印图资源, 水印水平坐标, 水印垂直坐标, 拷贝水印图的起始水平坐标, 拷贝水印图的起始垂直坐标, 要拷贝的宽度, 要拷贝的高度, 水印透明度); - 水印透明度:透明度范围是0-100 5. 输出图像 函数关键字`image+图片格式` 更多查看官方手册 - [imagejpeg](http://php.net/manual/zh/function.imagejpeg.php) 输出图象到浏览器或文件。 - imagepng - imagegif - imagewbmp - ... > 如果要输出到浏览器中,需要设置content-type头部 - [header - 手册](http://php.net/manual/zh/function.header.php) 发送原生 HTTP 头 - [常用对照表](http://tool.oschina.net/commons) 6. 释放图像资源 - [imagedestroy](http://php.net/manual/zh/function.imagedestroy.php) 销毁图像 ## 文字水印 简单分析形参都有哪些(为了方便理解,我对参数进行了语义化) > imagettftext(图像资源, 文字尺寸, 文字角度, 文字水平坐标, 文字垂直坐标, 文字颜色, 字体, 文本文字) - 文字尺寸 GD库版本是1时,单位是像素(px),版本是2时,单位是点/磅(pt) [px,pt,em换算表](http://www.runoob.com/w3cnote/px-pt-em-convert-table.html) - 文字水平垂直基点位置 字符的左下角为基本点 - 文字颜色 颜色索引,通过[imagecolorallocate](http://php.net/manual/zh/function.imagecolorallocate.php)函数创建 - 字体 字体的绝对路径 其他参考 - [绝对详解PHP 的imageTtfText()函数](https://blog.csdn.net/u012767761/article/details/73927728)