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的FTP学习(一)
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
常用的php对象类型判断
Aug 27 PHP
php checkbox 取值详细说明
Aug 19 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
php导出生成word的方法
Dec 25 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 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
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
js图片处理示例代码
2014/05/12 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
Python 元类使用说明
2009/12/18 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
使用Python对SQLite数据库操作
2017/04/06 Python
python实现人民币大写转换
2018/06/20 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
python中str内置函数用法总结
2020/12/27 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
民族团结好少年事迹材料
2014/08/19 职场文书
幸福中国演讲稿
2014/09/12 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
三下乡个人总结
2015/03/04 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
redis复制有可能碰到的问题汇总
2022/04/03 Redis