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 常见郁闷问题答解
Nov 25 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP批量删除jQuery操作
Jul 23 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 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中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
python正则表达式中的括号匹配问题
2014/12/14 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python 堆和优先队列的使用详解
2019/03/05 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
python超时重新请求解决方案
2019/10/21 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
个人承诺书
2014/03/26 职场文书
工程造价专业求职信
2014/07/17 职场文书
会计学习心得体会
2014/09/09 职场文书
北京青年观后感
2015/06/15 职场文书
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android