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调用三种数据库的方法(1)
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
laravel 5 实现模板主题功能
Mar 02 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
php 基础函数
Feb 10 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 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检测图片木马多进制编程实践
2013/04/11 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
react-router中的属性详解
2017/06/01 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python实现八大排序算法(2)
2017/09/14 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
介绍一下gcc特性
2015/10/31 面试题
金融专业应届生求职信
2013/11/02 职场文书
总经理秘书的岗位职责
2013/12/27 职场文书
军训感想500字
2014/02/20 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
遗产继承公证书
2014/04/09 职场文书
治安消防安全责任书
2014/07/23 职场文书
四风查摆剖析材料
2014/10/10 职场文书
婚庆答谢词
2015/01/04 职场文书
八达岭长城导游词
2015/01/30 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js