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 pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
php中explode与split的区别介绍
Oct 03 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
php错误日志简单配置方法
Jul 11 PHP
php网页版聊天软件实现代码
Aug 12 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
详解Laravel制作API接口
May 31 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替换字符串中间字符为省略号的方法
2015/05/04 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python实现JSON反序列化类对象的示例
2018/01/31 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python中如何使用insert函数
2020/01/09 Python
Python调用Windows命令打印文件
2020/02/07 Python
深入了解Python enumerate和zip
2020/07/16 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
资深地理教师自我评价
2013/09/21 职场文书
教你怎样写好自我评价
2013/10/05 职场文书
公司委托书范本5篇
2014/09/20 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
Java 多态分析
2022/04/26 Java/Android