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 相关文章推荐
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
解决MySQL中文输出变成问号的问题
Jun 05 PHP
php数组总结篇(一)
Sep 30 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
php实现递归抓取网页类实例
Apr 03 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
php session的应用详细介绍
Mar 22 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
javascript每日必学之循环
2016/02/19 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
python二分法实现实例
2013/11/21 Python
Python httplib模块使用实例
2015/04/11 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
元旦标语大全
2014/10/09 职场文书
开学第一周总结
2015/07/16 职场文书
春节慰问简报
2015/07/21 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript