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中使用excel的简单介绍
Aug 02 PHP
php页面防重复提交方法总结
Nov 25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php中序列化与反序列化详解
Feb 13 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
php中如何执行linux命令详解
Nov 06 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
禁止直接访问php文件代码分享
May 05 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中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
PHP时间类完整代码实例
2021/02/26 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
python控制台英汉汉英电子词典
2020/04/23 Python
利用Psyco提升Python运行速度
2014/12/24 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
对python Tkinter Text的用法详解
2018/10/11 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
质检部岗位职责
2013/11/11 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
2014年校长工作总结
2014/12/11 职场文书
简历自我评价模板
2015/03/11 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
frg-100简单操作(设置)说明
2022/04/05 无线电
Python安装使用Scrapy框架
2022/04/12 Python
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS