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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
php FPDF类库应用实现代码
Mar 20 PHP
PHP使用数组实现队列
Feb 05 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
解决Laravel5.5下的toArray问题
Oct 15 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 calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
jquery插件开发方法(初学者)
2012/02/03 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
简单了解python元组tuple相关原理
2019/12/02 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
护士思想汇报
2014/01/12 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
社区义诊活动总结
2014/04/30 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
Python中itertools库的四个函数介绍
2022/04/06 Python