如何用php生成扭曲及旋转的验证码图片


Posted in PHP onJune 07, 2013
<?php 
function make_rand($length="32"){//验证码文字生成函数 
        $str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 
    $result=""; 
    for($i=0;$i<$length;$i++){ 
        $num[$i]=rand(0,61); 
        $result.=$str[$num[$i]]; 
    } 
    return $result; 
} 
$checkcode = make_rand(5); 
$im_x=160; 
$im_y=32; 
function make_crand($length="5") { 
    $string = ''; 
    for($i=0;$i<$length;$i++) { 
        $string .= chr(rand(0xB0,0xF7)).chr(rand(0xA1,0xFE)); 
    } 
    return $string; 
} 
function getAuthImage($text , $im_x = 230 , $im_y = 32) { 
    $im = imagecreatetruecolor($im_x,$im_y); 
    $text_c = ImageColorAllocate($im, mt_rand(0,100),mt_rand(0,100),mt_rand(0,100)); 
    $tmpC0=mt_rand(100,255); 
    $tmpC1=mt_rand(100,255); 
    $tmpC2=mt_rand(100,255); 
    $buttum_c = ImageColorAllocate($im,$tmpC0,$tmpC1,$tmpC2); 
    imagefill($im, 16, 13, $buttum_c); 
    //echo $text; 
    $font = 'c://WINDOWS//Fonts//simsun.ttc'; 
    //echo strlen($text); 
    $text=iconv("gb2312","UTF-8",$text); 
    //echo mb_strlen($text,"UTF-8"); 
    for ($i=0;$i<mb_strlen($text);$i++) 
    { 
            $tmp =mb_substr($text,$i,1,"UTF-8"); 
            $array = array(-1,0,1); 
            $p = array_rand($array); 
            $an = $array[$p]*mt_rand(1,9);//角度 
            $size = 20; 
            imagettftext($im,$size,$an,10+$i*$size*2,25,$text_c,$font,$tmp); 
    } 
     $distortion_im = imagecreatetruecolor ($im_x, $im_y); 
     imagefill($distortion_im, 16, 13, $buttum_c); 
     for ( $i=0; $i<$im_x; $i++) { 
         for ( $j=0; $j<$im_y; $j++) { 
             $rgb = imagecolorat($im, $i , $j); 
             if( (int)($i+20+sin($j/$im_y*2*M_PI)*10) <= imagesx($distortion_im) && (int)($i+20+sin($j/$im_y*2*M_PI)*10) >=0 ) { 
                 imagesetpixel ($distortion_im, (int)($i+10+sin($j/$im_y*2*M_PI-M_PI*0.5)*3) , $j , $rgb); 
             } 
         } 
     } 
     //加入干扰象素; 
    $count = 600;//干扰像素的数量 
    for($i=0; $i<$count; $i++){ 
            $randcolor = ImageColorallocate($distortion_im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 
            imagesetpixel($distortion_im, mt_rand()%$im_x , mt_rand()%$im_y , $randcolor); 
    } 
    $line_c=5; 
     //imageline 
     for($i=0; $i < $line_c; $i++) { 
         $linecolor = imagecolorallocate($distortion_im, 17, 158, 20); 
         $lefty = mt_rand(1, $im_x-1); 
         $righty = mt_rand(1, $im_y-1); 
         imageline($distortion_im, 0, $lefty, imagesx($distortion_im), $righty, $linecolor); 
     } 
     Header("Content-type: image/PNG"); 
    //以PNG格式将图像输出到浏览器或文件; 
    //ImagePNG($im); 
    ImagePNG($distortion_im); 
    //销毁一图像,释放与image关联的内存; 
    ImageDestroy($distortion_im); 
    ImageDestroy($im); 
} 
?>

用法示例如下:
<?php
getAuthImage(make_crand(5)); 
?>

PHP 相关文章推荐
php实现的MySQL通用查询程序
Mar 11 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
8个必备的PHP功能开发
Oct 02 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
利用php获取服务器时间的实现代码
Jun 07 #PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 #PHP
PHP5常用函数列表(分享)
Jun 07 #PHP
深入理解php的MySQL连接类
Jun 07 #PHP
PHP之生成GIF动画的实现方法
Jun 07 #PHP
深入HTTP响应状态码速查表的详解
Jun 07 #PHP
探讨如何把session存入数据库
Jun 07 #PHP
You might like
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
jQuery获得子元素个数的方法
2015/04/14 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
js实现tab切换效果
2017/02/16 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python中的super()方法使用简介
2015/08/14 Python
Python 多线程实例详解
2017/03/25 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python面向对象封装操作案例详解
2019/12/31 Python
从python读取sql的实例方法
2020/07/21 Python
python map比for循环快在哪
2020/09/21 Python
浅析python实现动态规划背包问题
2020/12/31 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
企业办公室主任岗位职责
2014/02/19 职场文书
博士生求职信
2014/07/06 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android