PHP 给图片制作水印的方法

我们经常能在图片上看到一些水印,一般分为图片文字或者是两种一起的结合。那为什么要加水印呢?目的是为了防止别人盗图、造假或者标注出处等,保护图片原作者的著作权或是劳动成果。那么给图片加水印就非常有必要了。

怎么用PHP实现给图片加水印呢?

先来看看效果
PHP 给图片制作水印的方法_第1张图片

使用GD库

使用GD库来实现效果
图像处理和 GD - 手册
正所谓授人以鱼不如授人以渔,光贴代码不讲实现过程的,都是耍流氓。所以下面我会写功能的实现过程、过程所需要用到的函数。

内容基本都是干货,需要用到的时候可以方便查阅资料

关键函数

下面是php实现两种水印方式的关键函数:

两种水印的实现方式

图片水印

准备两张图片

  • 原图
  • 水印图

实现过程

  1. 在php中加载这两张图片,得到一个图像资源数据类型。
    根据不同的图片格式,使用对应函数

    PHP 给图片制作水印的方法_第2张图片

    它们甚至可以加载一张来自网上的图片
  2. 读取图片宽高。

  3. 可能你会需要将水印图进行缩小或放大(如果不需要,可以跳过这一步)
    等比例缩放

    1. 计算缩放比例,根据想要缩放到的值(比如一张宽度是500px的图片,想缩小成50px)
    2. 计算缩放之后的宽高
    3. 创建一个新的图像资源(新图像的宽高等于缩放之后的宽高)
      imagecreatetruecolor 新建一个真彩色图像
    4. 拷贝部分图像并调整大小
      imagecopyresized 拷贝部分图像并调整大小

      参数说明(为了方便理解,我对参数进行了语义化)
      imagecopyresized(目标图像资源, 原图资源, 粘到目标图像的起始水平坐标, 粘到目标图像的起始垂直坐标, 拷贝原图的起始水平坐标, 拷贝原图的起始垂直坐标, 最终想要的宽度, 最终想要的高度, 原图的宽度, 原图的高度);
  4. 使用imagecopymerge函数,拷贝水印图并合并到原图中。

    简单分析形参都有哪些(为了方便理解,我对参数进行了语义化)
    imagecopymerge(原图资源, 水印图资源, 水印水平坐标, 水印垂直坐标, 拷贝水印图的起始水平坐标, 拷贝水印图的起始垂直坐标, 要拷贝的宽度, 要拷贝的高度, 水印透明度);
    • 水印透明度:透明度范围是0-100
  5. 输出图像
    函数关键字image+图片格式 更多查看官方手册

    • imagejpeg 输出图象到浏览器或文件。
    • imagepng
    • imagegif
    • imagewbmp
    • ...

      如果要输出到浏览器中,需要设置content-type头部
    • header - 手册 发送原生 HTTP 头
    • 常用对照表
  6. 释放图像资源

文字水印

简单分析形参都有哪些(为了方便理解,我对参数进行了语义化)

imagettftext(图像资源, 文字尺寸, 文字角度, 文字水平坐标, 文字垂直坐标, 文字颜色, 字体, 文本文字)
  • 文字尺寸

GD库版本是1时,单位是像素(px),版本是2时,单位是点/磅(pt)
px,pt,em换算表

  • 文字水平垂直基点位置

字符的左下角为基本点

  • 文字颜色

颜色索引,通过imagecolorallocate函数创建

  • 字体

字体的绝对路径

其他参考


如果这对你有帮助,或者能帮你节省一些时间,不如,点个赞吧~

原文地址

你可能感兴趣的:(php,水印,图片,图片处理)