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日

相关文章

  • jQuery实现的点击按钮改变样式功能示例

    下面是详细的攻略过程: 1. 需求分析 我们需要实现一个点击按钮改变样式的功能,通过观察需求可发现: 点击按钮可以改变被选择元素的样式 按钮可以多次点击,每次点击都可以改变样式 鼠标移开时样式不变 2. 技术选型 考虑到实现这个功能可能需要使用DOM操作和事件监听,我们选择使用jQuery实现。 3. 实现过程 步骤1:编写静态页面 首先,我们需要编写一个静…

    css 2023年6月10日
    00
  • JS实现图片延迟加载并淡入淡出效果的简单方法

    下面是JS实现图片延迟加载并淡入淡出效果的简单方法的完整攻略: 1. 安装插件 在实现图片延迟加载并淡入淡出的过程中,我们需要使用到Intersection Observer API,这是一个用于DOM观察的API,用来监听目标元素与其祖先元素或视窗是否交叉(即目标元素是否可见)的一个新接口,由于该API需要在旧版浏览器上进行兼容性处理,所以我们需要引入po…

    css 2023年6月10日
    00
  • 浅谈CSS编程中的定位问题

    当我们在进行 CSS 编程的时候,定位问题是一个非常重要的环节。在这篇文章中,我们将会从如下三个方面来浅谈 CSS 编程中的定位问题: 定位类型 定位属性 定位示例 定位类型 在 CSS 中,有三种常见的定位类型,分别是: 静态定位(static) 相对定位(relative) 绝对定位(absolute) 其中,静态定位是默认的定位类型,相对定位是相对于元…

    css 2023年6月9日
    00
  • php压缩HTML函数轻松实现压缩html/js/Css及注意事项

    PHP压缩HTML函数轻松实现压缩html/js/Css及注意事项 在Web开发中,压缩html/js/Css可以减少文件大小,提升页面加载速度,提高用户体验。本文介绍如何使用PHP编写一个html/js/Css压缩函数,并且注意一些需要遵守的注意事项。 函数实现 下面是一个简单的html/js/Css压缩函数的实现: function compress_h…

    css 2023年6月13日
    00
  • 关于vue.js过渡css类名的理解(推荐)

    关于vue.js过渡css类名的理解(推荐)这个主题,我可以给您提供以下完整攻略。 1.背景概述 Vue.js是一个渐进式JavaScript框架,它提供了过渡功能,使得我们可以在组件的状态或者父组件和子组件之间的切换时,清晰地呈现过渡动画的过程。这个过程中,Vue.js提供了丰富的css类名控制,帮助我们实现更加复杂和细致的动画效果。 2.过渡类名 Vue…

    css 2023年6月10日
    00
  • HTML+CSS3模拟心的跳动实例代码

    下面是“HTML+CSS3模拟心的跳动实例代码”的完整攻略: 1. 实例介绍 本实例是通过 HTML 和 CSS3 实现一个可爱的心形图案,并让它跳动动态展示。具体实现过程如下: 2. 实现步骤 2.1 第一步:HTML 代码编写 <div class="heart-container"> <div class=&quo…

    css 2023年6月9日
    00
  • HTML5 CSS3给网站设计带来出色效果

    当今,随着互联网技术不断地发展改进,HTML5和CSS3技术也不断地更新和升级。两者配合使用,可以为网站设计带来出色的效果,使网站不仅美观大方,而且交互性更强,用户体验也更好。 本篇攻略将详细讲解如何使用HTML5和CSS3技术来制作出令人惊叹的网站设计效果的步骤和方法。 一、利用HTML5新标签进行结构化布局 HTML5作为HTML的升级版,新增了很多的标…

    css 2023年6月9日
    00
  • 详解rem 适配布局

    下面我来详细讲解一下 “详解rem适配布局” 的完整攻略。 什么是rem适配布局? rem适配布局是一种根据不同设备屏幕大小自动调节页面元素大小的布局方式。常见的有两种方式: 根据屏幕宽度的百分比设置字体大小,如 font-size: 16px 改为 font-size: 5vw。vw是viewport width的缩写,1vw等于屏幕宽度的1%。 使用re…

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