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 smarty模版引擎中的缓存应用
Dec 02 PHP
apache mysql php 源码编译使用方法
May 03 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
srcElement表格样式
2006/09/03 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
微信小程序开发探究
2016/12/27 Javascript
纯JS实现轮播图
2017/02/22 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现矩阵乘法的方法
2015/06/28 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Python中super函数用法实例分析
2019/03/18 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
先进班级集体事迹材料
2014/01/30 职场文书
犯错检讨书
2014/02/21 职场文书
医院员工辞职信范文
2015/05/12 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技