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 字符串 小常识
Jun 05 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
递归实现php数组转xml的代码分享
May 14 PHP
php+ajax注册实时验证功能
Jul 20 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
python实现ip查询示例
2014/03/26 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
python字符串中的单双引
2017/02/16 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
力学专业毕业生自荐信
2013/11/17 职场文书
小学门卫岗位职责
2013/12/17 职场文书
海南地接欢迎词
2014/01/14 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL