如何用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中实现汉字转区位码应用源码实例解析
Jun 14 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
php传值赋值和传地址赋值用法实例分析
Jun 20 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
laravel 使用auth编写登录的方法
Sep 30 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
mysql5写入和读出乱码解决
2006/11/25 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
深入php内核之php in array
2015/11/10 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
讲解Python中的标识运算符
2015/05/14 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python中的__slots__示例详解
2017/07/06 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
论文评语大全
2014/04/29 职场文书
消防志愿者活动方案
2014/08/23 职场文书
信访工作个人总结
2015/03/03 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书