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 select,radio和checkbox默认选择的实现方法
May 15 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php统计文章排行示例
2014/03/04 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
javascript 精粹笔记
2010/05/09 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python中PIL安装简单教程
2016/04/21 Python
Python中property函数用法实例分析
2018/06/04 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
python怎么删除缓存文件
2020/07/19 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
思想品德课教学反思
2014/02/10 职场文书
会计电算化专业求职信
2014/06/10 职场文书
导游词之井冈山
2019/11/20 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis