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 相关文章推荐
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
别人整理的服务器变量:$_SERVER
Oct 20 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
PHP中的integer类型使用分析
Jul 27 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
php生成微信红包数组的方法
2019/09/05 PHP
JavaScript模板入门介绍
2012/09/26 Javascript
jQuery链使用指南
2015/01/20 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Python中的yield浅析
2014/06/16 Python
在Windows8上的搭建Python和Django环境
2014/07/03 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python dlib人脸识别代码实例
2019/04/04 Python
创建Django项目图文实例详解
2019/06/06 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
业务员简历自我评价
2014/03/06 职场文书
颁奖典礼主持词
2014/03/25 职场文书
调研座谈会发言材料
2014/08/23 职场文书
教师节学生演讲稿
2014/09/03 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers