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 29 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
PHP面试题之文件目录操作
Oct 15 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
phpQuery采集网页实现代码实例
Apr 02 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
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
7个JS基础知识总结
2014/03/05 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
Python写的服务监控程序实例
2015/01/31 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
专科毕业生求职简历的自我评价
2013/10/12 职场文书
二年级体育教学反思
2014/01/15 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python