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
JpGraph php柱状图使用介绍
Aug 23 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
php简单防盗链实现方法
Jul 29 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
php插件Xajax使用方法详解
Aug 31 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
Laravel多域名下字段验证的方法
Apr 04 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 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
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
ASP Json Parser修正版
2009/12/06 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
python3实现mysql导出excel的方法
2019/07/31 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
python import 上级目录的导入
2020/11/03 Python
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
医学生实习自荐信
2013/10/01 职场文书
捐助感谢信
2015/01/22 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
微观世界观后感
2015/06/10 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js