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 分库分表hash算法
Nov 12 PHP
PHP 图像尺寸调整代码
May 26 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
php实现中文转数字
Feb 18 PHP
功能强大的php文件上传类
Aug 29 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PDO::errorInfo讲解
Jan 28 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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作为网站开发语言的原因分享
2012/01/03 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
js模块加载方式浅析
2017/08/12 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
Python中shutil模块的学习笔记教程
2017/04/04 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python绘制地震散点图
2019/06/18 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
《春雨》教学反思
2014/04/24 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
教师节倡议书2015
2015/04/27 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
go goth封装第三方认证库示例详解
2022/08/14 Golang