如何用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基础知识:类与对象(1)
Dec 13 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
php结合安卓客户端实现查询交互实例
May 05 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 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/01 无线电
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php跨站攻击实例分析
2014/10/28 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
Javascript window对象详解
2014/11/12 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
django之常用命令详解
2016/06/30 Python
python对象及面向对象技术详解
2016/07/19 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
python数据封装json格式数据
2018/03/04 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
谈谈Python中的while循环语句
2019/03/10 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
竞争上岗实施方案
2014/03/21 职场文书
活动总结报告怎么写
2014/07/03 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书