如何用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 学习路线与时间表
Feb 21 PHP
php4与php5的区别小结(配置异同)
Dec 20 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
试用php中oci8扩展
Jun 18 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 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中养成7个面向对象的好习惯
2010/01/28 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python实现ip查询示例
2014/03/26 Python
Python中有趣在__call__函数
2015/06/21 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
Python中字符串List按照长度排序
2019/07/01 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
小学生操行评语大全
2014/04/22 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
利用javaScript处理常用事件详解
2021/04/14 Javascript