如何用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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php字符串截取函数用法分析
Nov 25 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
twig模板获取全局变量的方法
Feb 05 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
Docker搭建自己的PHP开发环境
Feb 24 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
解决GD中文乱码问题
2007/02/14 PHP
php foreach、while性能比较
2009/10/15 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
浅谈Python的文件类型
2016/05/30 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python爬取哈尔滨天气信息
2018/07/14 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
实习自我评价怎么写
2013/12/02 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
邀请书模板
2015/02/02 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL