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也可以?成Shell Script
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
php二维数组转成字符串示例
Feb 17 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
php限制文件下载速度的代码
Oct 20 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
php微信开发之关注事件
Jun 14 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
js对象数组按属性快速排序
2011/01/31 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python获取糗百图片代码实例
2013/12/18 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
keras实现多种分类网络的方式
2020/06/11 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
自我评价是什么
2014/01/04 职场文书
期中考试后的反思
2014/02/08 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
仓管员岗位责任制
2014/02/19 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
服务明星事迹材料
2014/12/29 职场文书
党内外群众意见范文
2015/06/02 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android