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初学者头痛的十四个问题
Jul 12 PHP
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
用php获取远程图片并把它保存到本地的代码
Apr 07 PHP
PHP 文件系统详解
Sep 13 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
详解django中使用定时任务的方法
2018/09/27 Python
PHP统计代码行数的小代码
2019/09/19 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
python re的findall和finditer的区别详解
2020/11/15 Python
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
小学教育见习报告
2014/10/31 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
女性励志书籍推荐
2019/08/19 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android