如何用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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
PHP防CC攻击实现代码
Dec 29 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php跨站攻击实例分析
Oct 28 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
PHP解决高并发的优化方案实例
Dec 10 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下实现农历日历的代码
2007/03/07 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Python小白垃圾回收机制入门
2020/06/09 Python
python求解汉诺塔游戏
2020/07/09 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
升职自荐书范文
2013/11/28 职场文书
客服服务心得体会
2013/12/30 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
法定代表人身份证明书
2015/06/18 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技