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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
解析php时间戳与日期的转换
Jun 06 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
基于php双引号中访问数组元素报错的解决方法
Feb 01 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
python 设置文件编码格式的实现方法
2017/12/21 Python
Python中property函数用法实例分析
2018/06/04 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
工厂仓管员岗位职责
2014/01/01 职场文书
社区春季防火方案
2014/06/02 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书