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 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
PHP HTML代码串截取代码
Dec 29 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
PHP操作数组相关函数
Feb 03 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
PHP 转义使用详解
Jul 15 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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网上调查系统
2006/10/09 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
php中如何执行linux命令详解
2018/11/06 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
php精度计算的问题解析
2019/06/21 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
vue中英文切换实例代码
2020/01/21 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
英文翻译的自我评价语句
2013/10/04 职场文书
项目投资建议书
2014/05/16 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
个人学习总结范文
2015/02/15 职场文书
2015年大学社团工作总结
2015/04/09 职场文书