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语法(2)
Oct 09 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
第四章 php数学运算
Dec 30 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 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运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
es6学习之解构时应该注意的点
2017/08/29 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
python基于win32api实现键盘输入
2020/12/09 Python
用python制作个视频下载器
2021/02/01 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
技校毕业生自荐信
2014/06/03 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
单位工作证明书格式
2014/10/04 职场文书
纪委立案决定书
2015/06/24 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
深入理解go slice结构
2021/09/15 Golang
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python