如何用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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
PHP XML数据解析代码
May 26 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
php图片裁剪函数
Oct 31 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python中分数的相关使用教程
2015/03/30 Python
tensorboard显示空白的解决
2020/02/15 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
实体的生命周期
2013/08/31 面试题
医院护士的求职信范文
2013/12/26 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
岗位竞聘书范文
2014/03/31 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
村容村貌整治方案
2014/05/21 职场文书
幼师求职信
2014/06/23 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
旗帜观后感
2015/06/08 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
青年教师听课心得体会
2016/01/15 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
Java中API的使用方法详情
2022/04/06 Java/Android
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技