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下过滤html代码的函数 提高程序安全性
Mar 02 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
php join函数应用
May 04 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
PHP防盗链代码实例
Aug 27 PHP
php include类文件超时问题处理
Feb 06 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 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运行时强制显示出错信息的代码
2011/04/20 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php之curl设置超时实例
2014/11/03 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
Python 中的 else详解
2016/04/23 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
python中np是做什么的
2020/07/21 Python
python 6种方法实现单例模式
2020/12/15 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
实体的生命周期
2013/08/31 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
会计主管岗位职责范文
2013/11/08 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
专题组织生活会方案
2014/06/15 职场文书
人力资源管理求职信
2014/08/07 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫