PHP图片加水印实现方法

下面是“PHP图片加水印实现方法”的详细攻略。

1. 准备工作

在进行加水印操作前,需要确保安装了 PHP 的 GD 库。如果没有安装,可以通过以下命令进行安装:

sudo apt-get install php7.2-gd

同时需要准备一张水印图片,该图片可以是 PNG、JPG 或 GIF 格式。我们可以先随便找张图片用于测试。

2. 实现步骤

2.1 打开原图片和水印图片

使用 PHP 的 imagecreatefromjpegimagecreatefrompngimagecreatefromgif 函数,打开需要加水印的图片和水印图片,生成对应的图像资源。

//打开原图片
$srcImg = imagecreatefromjpeg('original.jpg'); //这里以 JPG 格式为例
//打开水印图片
$watermarkImg = imagecreatefrompng('watermark.png'); //这里以 PNG 格式为例

2.2 获取图片信息和水印图片信息

使用 PHP 的 getimagesize 函数获取原图片和水印图片的宽度和高度信息,以便后续计算水印位置。同时也需要获取水印图片的透明度信息。

//获取原图片信息
$srcImgInfo = getimagesize('original.jpg');
$srcWidth = $srcImgInfo[0];
$srcHeight = $srcImgInfo[1];

//获取水印图片信息
$watermarkImgInfo = getimagesize('watermark.png');
$watermarkWidth = $watermarkImgInfo[0];
$watermarkHeight = $watermarkImgInfo[1];
$watermarkTransparency = imagecolorsforindex($watermarkImg, imagecolorat($watermarkImg, 0, 0))['alpha'];

2.3 计算水印位置

根据原图片和水印图片的宽度和高度信息,计算水印的位置。通常情况下,水印放在原图片右下角比较合适。

//计算水印位置
$x = $srcWidth - $watermarkWidth - 10; //水印距离右边 10 像素
$y = $srcHeight - $watermarkHeight - 10; //水印距离底部 10 像素

2.4 将水印图片复制到原图片上

使用 PHP 的 imagecopyimagecopymerge 函数将水印图片复制到原图片上,并设定水印的位置和透明度。

//将水印图片复制到原图片上
if ($watermarkTransparency < 127) { //不透明度较低,采用 imagecopy 函数
    imagecopy($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);
} else { //不透明度较高,采用 imagecopymerge 函数
    imagecopymerge($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, 50);
}

2.5 保存加水印后的图片

使用 PHP 的 imagejpegimagepngimagegif 函数,将加水印后的图片保存到指定目录中。

//保存加水印后的图片
imagejpeg($srcImg, 'watermarked.jpg'); //这里以 JPG 格式为例

3. 示例说明

示例 1

下面是一个简单的 PHP 图片加水印的示例代码:

//打开原图片
$srcImg = imagecreatefromjpeg('original.jpg'); //这里以 JPG 格式为例

//打开水印图片
$watermarkImg = imagecreatefrompng('watermark.png'); //这里以 PNG 格式为例

//获取原图片信息
$srcImgInfo = getimagesize('original.jpg');
$srcWidth = $srcImgInfo[0];
$srcHeight = $srcImgInfo[1];

//获取水印图片信息
$watermarkImgInfo = getimagesize('watermark.png');
$watermarkWidth = $watermarkImgInfo[0];
$watermarkHeight = $watermarkImgInfo[1];
$watermarkTransparency = imagecolorsforindex($watermarkImg, imagecolorat($watermarkImg, 0, 0))['alpha'];

//计算水印位置
$x = $srcWidth - $watermarkWidth - 10; //水印距离右边 10 像素
$y = $srcHeight - $watermarkHeight - 10; //水印距离底部 10 像素

//将水印图片复制到原图片上
if ($watermarkTransparency < 127) { //不透明度较低,采用 imagecopy 函数
    imagecopy($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);
} else { //不透明度较高,采用 imagecopymerge 函数
    imagecopymerge($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, 50);
}

//保存加水印后的图片
imagejpeg($srcImg, 'watermarked.jpg'); //这里以 JPG 格式为例

示例 2

下面是另一个示例代码,使用 PHP 的函数库封装了加水印的方法,让操作更加简单:

/**
 * 添加水印
 *
 * @param string $srcImagePath 原图片路径
 * @param string $watermarkImagePath 水印图片路径
 * @param int $x 水印位置x轴坐标
 * @param int $y 水印位置y轴坐标
 */
function addWatermark($srcImagePath, $watermarkImagePath, $x, $y)
{
    //打开原图片
    $srcImg = imagecreatefromjpeg($srcImagePath); //这里以 JPG 格式为例

    //打开水印图片
    $watermarkImg = imagecreatefrompng($watermarkImagePath); //这里以 PNG 格式为例

    //获取原图片信息
    $srcImgInfo = getimagesize($srcImagePath);
    $srcWidth = $srcImgInfo[0];
    $srcHeight = $srcImgInfo[1];

    //获取水印图片信息
    $watermarkImgInfo = getimagesize($watermarkImagePath);
    $watermarkWidth = $watermarkImgInfo[0];
    $watermarkHeight = $watermarkImgInfo[1];
    $watermarkTransparency = imagecolorsforindex($watermarkImg, imagecolorat($watermarkImg, 0, 0))['alpha'];

    //将水印图片复制到原图片上
    if ($watermarkTransparency < 127) { //不透明度较低,采用 imagecopy 函数
        imagecopy($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);
    } else { //不透明度较高,采用 imagecopymerge 函数
        imagecopymerge($srcImg, $watermarkImg, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, 50);
    }

    //保存加水印后的图片
    imagejpeg($srcImg, 'watermarked.jpg'); //这里以 JPG 格式为例
}

//示例调用
addWatermark('original.jpg', 'watermark.png', 10, 10);

注意:示例 2 仅供参考,不保证在所有环境下都能正常运行。这里的 imagecreatefromjpegimagecreatefrompngimagecreatefromgifimagejpegimagepngimagegifgetimagesizeimagecolorsforindeximagecoloratimagecopyimagecopymerge 函数都需要 PHP 的 GD 库支持,在一些比较简单的 PHP 网站环境中可能无法使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP图片加水印实现方法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP Zip压缩 在线对文件进行压缩的函数

    PHP Zip压缩是一种在线对文件进行压缩的函数,它可以让我们在服务器端对文件进行压缩操作,生成zip压缩包,并提供压缩包的下载链接。下面我将详细讲解PHP Zip压缩的完整攻略,并提供两条示例说明。 一、前置条件 在使用PHP Zip压缩之前,需要确保PHP Zip库已经被安装和启用,检查方法如下: <?php // 检查PHP Zip扩展是否启用 …

    PHP 2023年5月26日
    00
  • php生成随机数或者字符串的代码

    生成随机数或字符串是PHP开发中的常见需求,下面我将详细介绍PHP生成随机数或字符串的代码实现,包括生成指定长度的随机数、生成随机字符串、生成指定格式的随机字符串等。 生成指定长度的随机数 这里我们使用PHP内置的 mt_rand 函数和 range 函数结合来生成指定长度的随机数。 function create_random_numbers($lengt…

    PHP 2023年5月26日
    00
  • PHP得到mssql的存储过程的输出参数功能实现

    要实现在 PHP 中获取 MSSQL 存储过程的输出参数,可以按照以下步骤进行: 一、创建存储过程 首先,需要在 MSSQL 数据库中创建相应的存储过程,并且在存储过程中定义输出参数。例如,创建一个名为 get_employee_info 的存储过程,该过程接受员工号作为输入参数,返回员工的姓名、薪水和职位等信息: CREATE PROCEDURE get_…

    PHP 2023年5月26日
    00
  • PHP strripos函数用法总结

    当我们需要在一个字符串中找到子字符串的位置时,可以使用PHP中的strripos()函数。该函数可以忽略大小写,返回子字符串在父字符串中最后一次出现的位置。 下面是该函数的语法: strripos ( string $haystack , string $needle [, int $offset = 0 ] ) : int|false 它需要两个必要的参数…

    PHP 2023年5月26日
    00
  • 微信小程序实现跳转详情页面

    关于微信小程序实现跳转详情页面,可以参考以下步骤: 步骤一:创建详情页面 首先,需要创建一个提供详情展示的页面,命名为”detail”。 在detail页面中,可以添加需要展示的内容,例如商品名称、价格、图片等,并根据需要进行布局。 步骤二:定义跳转路径 接下来需要定义跳转路径,即在原页面上通过点击事件跳转到detail页面。 此时,可以使用navigato…

    PHP 2023年5月23日
    00
  • php简单防盗链实现方法

    下面是详细讲解PHP简单防盗链实现方法的攻略: 什么是防盗链 防盗链是指在网站运营过程中,因为其他站点未经允许地使用了网站的图片、视频、音频等内容或者链接,直接调用了相关资源而占用了网站服务器带宽和资源,导致网站性能下降或者出现其他问题。为了解决这一问题,网站可以通过一定技术手段,对盗链行为进行识别并拒绝服务。 PHP简单防盗链实现方法 第一步:获取请求头r…

    PHP 2023年5月27日
    00
  • PHP基于phpqrcode类生成二维码的方法详解

    PHP基于phpqrcode类生成二维码的方法详解 简介 二维码是一种常见的用于存储信息的图形编码,广泛应用于各种领域,例如商品条码、支付链接等。本文将介绍如何使用PHP基于phpqrcode类生成二维码。 安装phpqrcode类 phpqrcode是一个比较流行的PHP二维码生成类库,使用该类库可以轻松生成不同尺寸、不同格式的二维码。 我们可以通过以下方…

    PHP 2023年5月26日
    00
  • PHP中使用DOMDocument来处理HTML、XML文档的示例

    使用DOMDocument是PHP中处理HTML和XML文档的一种常用方法,可以通过DOMDocument类来解析、创建和修改具有节点、元素、属性和文本等内容的文档。下面将详细讲解如何使用DOMDocument来处理HTML、XML文档的示例攻略。 1. 创建DOMDocument对象 首先要创建一个DOMDocument对象,可以通过调用该类的构造函数来创…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部