PHP经典的给图片加水印程序

首先,为了实现在图片上加水印,我们需要用到PHP的GD图形库,因此需要确保该扩展已在我们的服务器上启用。可以通过以下代码来检查:

<?php
phpinfo();
?>

执行后查看输出结果,如果找到GD图形库相关信息,则表示扩展已启用。

接着,我们需要对代码进行分析、编写。以下为完整的PHP图片加水印程序代码:

<?php

/**
 * 图片加水印函数
 * @param $srcImg string 原始图片路径
 * @param $waterImg string 水印图片路径
 * @param int $pos 水印位置,默认为9即右下角
 * @param int $pct 水印透明度,默认为60
 * @return bool 成功返回true,失败返回false
 */
function waterMark($srcImg, $waterImg, $pos = 9, $pct = 60)
{
    //获取原始图片和水印图片信息
    $srcInfo = getimagesize($srcImg);
    $waterInfo = getimagesize($waterImg);
    if (!$srcInfo || !$waterInfo) {
        return false;
    }

    //根据图片类型创建图像
    switch ($srcInfo['mime']) {
        case 'image/jpeg':
            $srcImage = imagecreatefromjpeg($srcImg);
            break;
        case 'image/gif':
            $srcImage = imagecreatefromgif($srcImg);
            break;
        case 'image/png':
            $srcImage = imagecreatefrompng($srcImg);
            break;
        default:
            return false;
    }
    $waterImage = imagecreatefrompng($waterImg);

    //设定水印位置
    switch ($pos) {
        case 1:
            $x = 0;
            $y = 0;
            break;
        case 2:
            $x = ($srcInfo[0] - $waterInfo[0]) / 2;
            $y = 0;
            break;
        case 3:
            $x = ($srcInfo[0] - $waterInfo[0]);
            $y = 0;
            break;
        case 4:
            $x = 0;
            $y = ($srcInfo[1] - $waterInfo[1]) / 2;
            break;
        case 5:
            $x = ($srcInfo[0] - $waterInfo[0]) / 2;
            $y = ($srcInfo[1] - $waterInfo[1]) / 2;
            break;
        case 6:
            $x = ($srcInfo[0] - $waterInfo[0]);
            $y = ($srcInfo[1] - $waterInfo[1]) / 2;
            break;
        case 7:
            $x = 0;
            $y = ($srcInfo[1] - $waterInfo[1]);
            break;
        case 8:
            $x = ($srcInfo[0] - $waterInfo[0]) / 2;
            $y = ($srcInfo[1] - $waterInfo[1]);
            break;
        case 9:
        default:
            $x = ($srcInfo[0] - $waterInfo[0]);
            $y = ($srcInfo[1] - $waterInfo[1]);
            break;
    }

    //合并图片
    imagecopymerge($srcImage, $waterImage, $x, $y, 0, 0, $waterInfo[0], $waterInfo[1], $pct);

    //保存合并后的图片到文件
    switch ($srcInfo['mime']) {
        case 'image/jpeg':
            imagejpeg($srcImage, $srcImg);
            break;
        case 'image/gif':
            imagegif($srcImage, $srcImg);
            break;
        case 'image/png':
            imagepng($srcImage, $srcImg);
            break;
    }

    //释放资源
    imagedestroy($srcImage);
    imagedestroy($waterImage);

    return true;
}

//示例1:给图片加一个默认水印,位于右下角,透明度为60%
waterMark('image.jpg', 'watermark.png');

//示例2:给图片加一个位于中心的水印,透明度为80%
waterMark('image.png', 'logo.png', 5, 80);

该程序的主要逻辑是将水印图片合并到原始图片上,并输出或保存到文件,主要包含以下步骤:

  1. 获取原始图片和水印图片的信息。
  2. 根据图片类型创建图像。
  3. 设定水印位置。
  4. 合并图片。
  5. 保存合并后的图片到文件。
  6. 释放资源。

在代码中,我们定义了一个名为waterMark的函数,该函数接收四个参数:原始图片路径、水印图片路径、水印位置和水印透明度。其中,位置和透明度均有默认值,未传入时程序会使用默认值。

示例1:给图片加一个默认水印

水印位于右下角,透明度为60%

waterMark('image.jpg', 'watermark.png');

示例2:给图片加一个位于中心的水印

水印透明度为80%

waterMark('image.png', 'logo.png', 5, 80);

以上就是PHP经典的给图片加水印程序的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP经典的给图片加水印程序 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • React diff算法原理详细分析

    那么我将为您详细讲解”React diff算法原理详细分析”。 什么是React Diff算法? React中的Diff算法是一个优化策略,帮助我们减少页面重新渲染的次数。基于旧虚拟DOM,React会计算出新的虚拟DOM,通过比较两个虚拟DOM的不同,React会计算出最小化的操作,将更新反映到页面上。React为了提高性能,采用了一种叫做分层的优化策略。…

    css 2023年6月10日
    00
  • 一文汇总 CSS 两列布局和三列布局的具体使用

    一文汇总 CSS 两列布局和三列布局的具体使用 CSS 布局是网页设计中最为重要的一环。在实际开发过程中,经常需要用到两列或者三列的布局方式。以下是两列布局和三列布局的具体使用攻略。 两列布局 1. float布局方式 float布局方式是网页开发中最常用的布局方式之一,可以轻松实现两列布局。具体代码如下: .box{ width: 100%; } .lef…

    css 2023年6月10日
    00
  • CSS教程之div垂直居中的多种方法

    下面是关于CSS中div垂直居中的多种方法的完整攻略。 方法一:使用flex布局 在CSS3中,flex布局提供了一种简单且有效的垂直居中方法。可以通过以下步骤实现: 将父元素的display属性设置为flex 将父元素的justify-content和align-items属性都设置为center,即水平居中和垂直居中。 示例如下: <style&g…

    css 2023年6月10日
    00
  • 纯CSS实现markdown自动编号的示例代码

    下面是实现 Markdown 自动编号的完整攻略: 1. 编写 HTML 结构 首先,我们需要在 HTML 中编写 Markdown 的各级标题结构。具体来说,我们需要为每个标题添加对应的 HTML 标记和一个唯一的 id 属性,以便后续的 CSS 选择器匹配。 下面是一个示例的 HTML 结构: <h1 id="section1"…

    css 2023年6月10日
    00
  • vue-quill-editor如何设置字体大小

    请参考以下攻略: vue-quill-editor如何设置字体大小 vue-quill-editor是一个Vue.js组件,用于在应用程序中集成Quill富文本编辑器。在设置字体大小时,我们可以通过以下步骤来实现: 创建一个自定义组件 我们可以使用vue-cli快速创建一个Vue.js工程,并通过npm安装vue-quill-editor: npm inst…

    css 2023年6月11日
    00
  • Bootstrap基本布局实现方法详解

    首先,我们需要了解Bootstrap的响应式栅格系统。栅格系统是Bootstrap的重要组成部分,通过在容器中创建行和列,我们可以轻松地在页面上实现灵活的布局,同时还可以让页面在不同大小的设备上呈现出不同的样式。 创建网页布局 要创建基本的布局,我们需要先创建一个容器 标签,并将其放置在页面的最顶层。 <body> <div class=&…

    css 2023年6月11日
    00
  • JavaScript异常处理

    JavaScript异常处理可以帮助开发人员减少代码中的错误,提高代码的健壮性和稳定性。在 JavaScript 中,异常是由错误或异常条件引起的程序流控制中的偏差,也就是程序出了问题。 JavaScript异常处理通常使用 try-catch 语句块实现。try 语句块包含可能引发异常的代码,而 catch 语句块用于捕捉异常并处理它们。以下是一个基本的 …

    Web开发基础 2023年3月30日
    00
  • JavaScript自定义鼠标右键菜单栏

    下面我将为大家讲解 JavaScript 自定义鼠标右键菜单栏的完整攻略。 实现思路 实现 JavaScript 自定义鼠标右键菜单栏的基本思路如下: 监听右键菜单事件,捕获鼠标点击坐标; 动态创建 <div> 元素,设置其样式、定位,同时设置 display:none 隐藏起来; 将该 <div> 元素添加到 <body&gt…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部