如何用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编写聊天室
Oct 09 PHP
Smarty安装配置方法
Apr 10 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 PHP
php实现mysql事务处理的方法
Dec 25 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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文件上传(实例)
2013/10/27 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
详解python3中zipfile模块用法
2018/06/18 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python多线程实现TCP服务端
2019/09/03 Python
Python中求对数方法总结
2020/03/10 Python
Django在Model保存前记录日志实例
2020/05/14 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
经典C++面试题一
2016/11/06 面试题
大学生通用个人的自我评价
2014/02/10 职场文书
银行求职信范文
2014/05/26 职场文书
汽修专业自荐信
2014/07/07 职场文书
环卫工作汇报材料
2014/10/28 职场文书
会计简历自我评价
2015/03/10 职场文书
家庭经济困难证明
2015/06/23 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python