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中的正规表达式(一)
Oct 09 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP读取xml方法介绍
Jan 12 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
php模板原理讲解
Nov 13 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
分析php://output和php://stdout的区别
May 06 PHP
php接口隔离原则实例分析
Nov 11 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
制作美丽的拉花
2021/03/03 冲泡冲煮
如何使用PHP获取网络上文件
2006/10/09 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
node.js到底要不要加分号浅析
2018/07/11 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
vuex的使用步骤
2021/01/06 Vue.js
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python selenium如何设置等待时间
2016/09/15 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python中random模块详解
2021/03/01 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
请解释在new与override的区别
2012/10/29 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
找工作最新求职信
2013/12/22 职场文书
小学二年级评语
2014/04/21 职场文书
创业培训计划书
2014/05/03 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
歌剧魅影观后感
2015/06/05 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript