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 相关文章推荐
全文搜索和替换
Oct 09 PHP
杏林同学录(九)
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
微信自定义分享php代码分析
Nov 24 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
php用户名的密码加密更安全的方法
Jun 21 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
重置版战役片段
2020/04/09 魔兽争霸
php中error与exception的区别及应用
2014/07/28 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python实现随机漫步方法和原理
2019/06/10 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
区优秀教师事迹材料
2014/02/10 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
决心书标准格式
2014/03/11 职场文书
电视购物广告词
2014/03/19 职场文书
青年志愿者活动总结
2014/04/26 职场文书
任命书格式范文
2015/09/22 职场文书