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 相关文章推荐
利用php来自动调用不同服务器上的flash
Oct 09 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
PHP单例模式详细介绍
Jul 01 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
使用WAMP搭建PHP本地开发环境
May 10 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
理解javascript模块化
2016/03/28 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
PyTorch预训练的实现
2019/09/18 Python
基于python实现从尾到头打印链表
2019/11/02 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
详解Python yaml模块
2020/09/23 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
应届生新闻编辑求职信
2013/11/19 职场文书
售后主管岗位职责
2013/12/08 职场文书
寒假实习自荐信
2014/01/26 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
五年级学生期末评语
2014/12/26 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python