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 分页类实现代码

    我会详细讲解“又一个php 分页类实现代码”的完整攻略。 又一个php 分页类实现代码 什么是分页? 分页是指将一定量的数据进行切割,每次只显示其中一部分数据的方式,将多页面切成一个个子页面,以方便用户阅读。 为什么需要分页? 大数据的处理必须使用分页机制,可以将一部分数据流进行缓存,减轻服务器压力,并能有效地提高用户体验。 怎么实现分页? 本文主要介绍一个…

    PHP 2023年5月27日
    00
  • PHP简单实现单点登录功能示例

    下面是详细的“PHP简单实现单点登录功能示例”的攻略,希望对你有所帮助。 什么是单点登录? 单点登录(Single Sign-On,简称SSO)是一种身份认证技术,允许用户只需一次登录即可在不同的系统中访问多个应用程序。在传统的身份验证方案中,用户必须在每个应用程序中分别登录,这既费时又不便。使用单点登录,用户无需频繁输入用户名和密码,而且可以更轻松地访问多…

    PHP 2023年5月24日
    00
  • PHP CLI模式下的多进程应用分析

    PHP CLI模式下的多进程应用可以通过PHP的pcntl和posix扩展来实现。本攻略将介绍如何使用这两个扩展来实现多进程的应用。 安装pcntl和posix扩展 PHP CLI模式默认不包含pcntl和posix扩展,需要手动安装。下面是安装命令的参考样例: Debian / Ubuntu sudo apt-get install php-pcntl s…

    PHP 2023年5月27日
    00
  • PHP中Too few arguments to function的问题及解决

    下面是“PHP中Toofewargumentstofunction的问题及解决”的完整使用攻略,包括问题描述、问题分析、问题解决和两个示例。 问题描述 在PHP中,当我们调用一个函数时,如果传递给的参数数量不足,就会出现”Toofewargumentstofunction”的错误。例如,当我们调用以下函数时: function add($a, $b) { r…

    PHP 2023年5月12日
    00
  • PHP实现网站访问量计数器

    方案一: 使用数据库记录网站访问量 在数据库中创建一个名为 “counter” 的表,其中包含两个字段 “id” 和 “count” 。其中 “id” 为自增主键, “count” 记录网站访问总量。 CREATE TABLE counter ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, count IN…

    PHP 2023年5月26日
    00
  • 微信小程序实现文件预览

    下面是详细讲解“微信小程序实现文件预览”的完整攻略。 思路概述 在微信小程序中实现文件预览,一般思路是获取文件的临时链接(即tempFilePath),然后使用<web-view>组件加载该链接从而完成文件的预览。同时,由于微信小程序对于不同文件类型的预览方式不同,所以需要进行相应的分类处理。 具体实现 获取 tempFilePath 首先需要通…

    PHP 2023年5月23日
    00
  • 正则表达式口诀 正则表达式学习工具

    正则表达式是一种用来匹配字符串的工具,它在文本处理中非常常用。正则表达式口诀是一种线上的学习工具,可以辅助用户学习正则表达式。下面我将详细介绍如何使用这个工具。 正则表达式口诀使用攻略 1. 进入正则表达式口诀官网 进入正则表达式口诀官网,打开页面后可以看到一个包含文字和图示的输入框。 2. 输入要匹配的正则表达式 将想要匹配的正则表达式输入到输入框中,可以…

    PHP 2023年5月28日
    00
  • PHP方法的返回值示例详解

    那么我将为你讲解“PHP方法的返回值示例详解”的完整攻略。 什么是返回值? 在 PHP 中,我们可以通过函数或方法来执行特定的操作,执行完成后可以返回一个值。这个值就是所谓的“返回值”。返回值可以是任何类型的数据,比如数字、字符串、数组、对象等。 如何定义返回值? 在方法中定义返回值,可以使用 return 语句。例如,下面的 getSum 方法通过计算两个…

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