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
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
php 正则表达式小结
Aug 31 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
js中的this关键字详解
2013/09/25 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
在Python中使用元类的教程
2015/04/28 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
18岁生日感言
2014/01/12 职场文书
聚美优品广告词改编
2014/03/14 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
伦敦奥运会口号
2014/06/13 职场文书
2014年技术部工作总结
2014/12/12 职场文书
英语邀请函范文
2015/02/02 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
资产移交协议书
2016/03/24 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
浅谈react useEffect闭包的坑
2021/06/08 Javascript