php实现图片添加水印功能


Posted in PHP onFebruary 13, 2014
<?php
/**
 * 图片加水印(适用于png/jpg/gif格式)
 * 
 * @author flynetcn
 *
 * @param $srcImg 原图片
 * @param $waterImg 水印图片
 * @param $savepath 保存路径
 * @param $savename 保存名字
 * @param $positon 水印位置 
 * 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右 
 * @param $alpha 透明度 -- 0:完全透明, 100:完全不透明
 * 
 * @return 成功 -- 加水印后的新图片地址
 *          失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
 *          -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
 */
function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30)
{
    $temp = pathinfo($srcImg);
    $name = $temp['basename'];
    $path = $temp['dirname'];
    $exte = $temp['extension'];
    $savename = $savename ? $savename : $name;
    $savepath = $savepath ? $savepath : $path;
    $savefile = $savepath .'/'. $savename;
    $srcinfo = @getimagesize($srcImg);
    if (!$srcinfo) {
        return -1; //原文件不存在
    }
    $waterinfo = @getimagesize($waterImg);
    if (!$waterinfo) {
        return -2; //水印图片不存在
    }
    $srcImgObj = image_create_from_ext($srcImg);
    if (!$srcImgObj) {
        return -3; //原文件图像对象建立失败
    }
    $waterImgObj = image_create_from_ext($waterImg);
    if (!$waterImgObj) {
        return -4; //水印文件图像对象建立失败
    }
    switch ($positon) {
    //1顶部居左
    case 1: $x=$y=0; break;
    //2顶部居右
    case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
    //3居中
    case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
    //4底部居左
    case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
    //5底部居右
    case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
    default: $x=$y=0;
    }
    imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
    switch ($srcinfo[2]) {
    case 1: imagegif($srcImgObj, $savefile); break;
    case 2: imagejpeg($srcImgObj, $savefile); break;
    case 3: imagepng($srcImgObj, $savefile); break;
    default: return -5; //保存失败
    }
    imagedestroy($srcImgObj);
    imagedestroy($waterImgObj);
    return $savefile;
}

function image_create_from_ext($imgfile)
{
    $info = getimagesize($imgfile);
    $im = null;
    switch ($info[2]) {
    case 1: $im=imagecreatefromgif($imgfile); break;
    case 2: $im=imagecreatefromjpeg($imgfile); break;
    case 3: $im=imagecreatefrompng($imgfile); break;
    }
    return $im;
}
PHP 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
详解PHP显示MySQL数据的三种方法
Jun 05 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php printf输出格式使用说明
Dec 05 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
Nov 22 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
php教程之phpize使用方法
Feb 12 #PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 #PHP
php-fpm配置详解
Feb 12 #PHP
PHP添加Xdebug扩展的方法
Feb 12 #PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 #PHP
php中的路径问题与set_include_path使用介绍
Feb 11 #PHP
php 不使用js实现页面跳转
Feb 11 #PHP
You might like
第十三节--对象串行化
2006/11/16 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
Firefox div高度自适应
2009/04/28 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
python web框架中实现原生分页
2019/09/08 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
常用的10个Python实用小技巧
2020/08/10 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
高校优秀辅导员事迹材料
2014/05/07 职场文书
银行委托书范本
2014/09/28 职场文书
家长给老师的感谢信
2015/01/20 职场文书
商务司机岗位职责
2015/04/10 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技
Vue Element plus使用方法梳理
2022/12/24 Vue.js