php生成验证码,缩略图及水印图的类分享


Posted in PHP onApril 07, 2016

封装了一个类,可生成验证码,缩略图,及水印图,分享给大家

<?php
class image{
  session_start();
  //验证码类
  static public function verify($code,$width=75,$height=25,$n=4){
    header("content-type:image/png");
    // 创建画布
    $img=imagecreatetruecolor($width,$height);
    // 设置背景色
    $bgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
    // 将背景色填充
    imagefill($img,0,0,$bgcolor);
    // 绘制五条弧线
    for($i=0;$i<5;$i++){
      $arccolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imagearc($img,mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(0,360),mt_rand(0,360),$arccolor);
    }
    // 绘制一百个点
    for($i=0;$i<100;$i++){
      $pixelcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imagesetpixel($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),$pixelcolor);
    }
    // 绘制五条线段
    for($i=0;$i<5;$i++){
      $linecolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imageline($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),mt_rand(1,($width-1)),mt_rand(1,($height-1)),$linecolor);
    }
    // 设置边框颜色
    $bdcolor=imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),rand(150,200));
    // 绘制一个矩形无填充边框
    imagerectangle($img,0,0,($width-1),($height-1),$bdcolor);
    // 设置验证码字符串
    $str='';
    for($i=1;$i<=$n;$i++){
      $str.=substr(str_shuffle($code),0,1);
    }
    $_SESSION['a']=$str;
    //
    for($i=0;$i<$n;$i++){
      $textcolor=imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
      imagettftext($img,1/($n+1)*$width,mt_rand(-20,20),((1-$n/(5+$n))*$width/($n-1)+$i*1/($n+1)*$width),1/2*($height+3/5*$height),$textcolor,'1.ttf',substr($str,$i,1));
    }
    // 打印图像
    imagepng($img);
    // 释放资源
    imagedestroy($img);
    return $str;
  }
  //缩略图类
  /*
  *$source需要缩略的图片
  */
  static public function thumbnail($source,$deletesource=false,$width=180){
    $info=getimagesize($source);
    //getimagesize方法获得图像的详细信息
    $createFun=str_replace('/','createfrom',$info['mime']);
    //将getimagesize中的['mime']中的/替换,变为imagecreatefromjpeg方法
    $src=$createFun($source);
    //创建图像
    $dst_w=$width;
    //缩略图的宽
    $dst_h=$width/$info[0]*$info[1];
    //计算缩略图的高
    $dst=imagecreatetruecolor($dst_w,$dst_h);
    //新建一个真彩色图像
    imagecopyresampled($dst,$src,0,0,0,0,$dst_w,$dst_h,$info['0'],$info['1']);
    //重采样拷贝部分图像并调整大小
    $saveFun=str_replace('/','',$info['mime']);
    //设置保存函数
    $ext=strrchr($source,'.');
    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串
    $thumbnailName=str_replace($ext,'',$source).'_thumbnail'.$ext;
    //设置保存路径
    if(!$deletesource){
      $saveFun($dst,$thumbnailName);
      //保存图像
    }else{
      $saveFun($dst,$thumbnailName);
      unlink($source);
      //删除原图
    }
    imagedestroy($src);
    //销毁资源
    imagedestroy($dst);
    //销毁资源
    return $thumbnailName;
 
  }
  //水印图类
  /*
  *$srcing水印图
  *$dsting原图
  */
  static public function watermark($dstimg,$srcimg){
    $dstinfo=getimagesize($dstimg);
    //getimagesize方法获取该图片的详细信息(该方法返回的是一个详细的数组)
    $srcinfo=getimagesize($srcimg);
    $createdst=str_replace('/','createfrom',$dstinfo['mime']);
    //将getimagesize方法返回的数组中的mime值中的/替换,结果为imagecreatefromjpeg
    $createsrc=str_replace('/','createfrom',$srcinfo['mime']);
    $dst=$createdst($dstimg);
    //替换后为imagecreatefromjpeg函数,创建一个图像
    $dst_w=imagesx($dst);
    //获取大图的宽
    $dst_h=imagesy($dst);
    //获取大图的高
    $src=$createsrc($srcimg);
    //替换后为imagecreatefromjpeg函数,创建一个图像
    $src_w=imagesx($src);
    //获取水印图的宽
    $src_h=imagesy($src);
    //获取水印图的高
    $watermaker=imagecopy($dst,$src,($dst_w-$src_w),($dst_h-$src_h),0,0,$src_w,$src_h);
    //将水印图复制在大图上
    $saveFun=str_replace('/','',$dstinfo['mime']);
    //将getimagesize返回数组中的['mime']中的斜杠替换为空,替换后的值为imagejpeg,即为保存函数
    $ext=strrchr($dstimg,'.');
    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串
    $watermaker=str_replace($ext,'',$dstimg).'_water'.time().$ext;
    //保存名
    $saveFun($dst,$watermaker);
    //保存图片,第一个参数为要保存的图片,第二个参数为保存路径或保存名
    imagedestroy($dst);
    //销毁资源
    imagedestroy($src);
    //销毁资源
    return $watermaker;
 
  }
 
}
?>
PHP 相关文章推荐
PHP中的正规表达式(一)
Oct 09 PHP
php 函数使用方法与函数定义方法
May 09 PHP
php获取文件大小的方法
Feb 26 PHP
PHP中的类型约束介绍
May 11 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php PDO异常处理详解
Nov 20 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
PHP使用token防止表单重复提交的方法
Apr 07 #PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 #PHP
Linux下编译redis和phpredis的方法
Apr 07 #PHP
php 实现进制相互转换
Apr 07 #PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 #PHP
php制作简单模版引擎
Apr 07 #PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 #PHP
You might like
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
django1.8使用表单上传文件的实现方法
2016/11/04 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
python Celery定时任务的示例
2018/03/13 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
中标通知书范本
2015/04/17 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电