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代码
Dec 06 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP开发框架总结收藏
Apr 24 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
用PHP为SHOPEX增加日志功能代码
Jul 02 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
使用prototype.js进行异步操作
2007/02/07 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
Python数组定义方法
2016/04/13 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
python批量赋值操作实例
2018/10/22 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
详解anaconda安装步骤
2020/11/23 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
材料化学应届生求职信
2013/10/09 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2014年学习部工作总结
2014/11/12 职场文书
继承公证书格式
2015/01/26 职场文书
三峡大坝导游词
2015/01/31 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python