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获取mysql版本的几种方法小结
Mar 25 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
laravel 数据验证规则详解
Oct 23 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
js hover 定时器(实例代码)
2013/11/12 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python线程详解
2015/06/24 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Python双链表原理与实现方法详解
2020/02/22 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
《水乡歌》教学反思
2014/04/24 职场文书
商务英语专业求职信
2014/06/26 职场文书
工程部部长岗位职责
2015/02/12 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书