PHP图片加水印实现方法


Posted in PHP onMay 06, 2016

本文实例讲述了PHP图片加水印实现方法。分享给大家供大家参考,具体如下:

<?php
echo img_water_mark("2008112023204423477802.gif", "copyImg.png", $savepath=null, $savename="123.gif", $positon=2, $alpha=60);
/**
 * 图片加水印(适用于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 相关文章推荐
转换中文日期的PHP程序
Oct 09 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
php文件上传 你真的掌握了吗
Nov 28 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
php数组冒泡排序算法实例
May 06 #PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 #PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 #PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 #PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 #PHP
zen_cart实现支付前生成订单的方法
May 06 #PHP
学习PHP的数组总结【经验】
May 05 #PHP
You might like
一个简单计数器的源代码
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php日历制作代码分享
2014/01/20 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
浅析使用Python操作文件
2017/07/31 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python requests.post带head和body的实例
2019/01/02 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
销售会计工作职责
2013/12/02 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
统计员岗位职责范本
2015/04/14 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
python基础入门之字典和集合
2021/06/13 Python
Python基础之变量的相关知识总结
2021/06/23 Python
Java基础-封装和继承
2021/07/02 Java/Android
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers