如何用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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
一篇不错的PHP基础学习笔记
Mar 18 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
Mar 18 PHP
js代码实现微博导航栏
Jul 30 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
PHP调用接口API封装的例子
Oct 11 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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设计模式 Command(命令模式)
2011/06/26 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
js实现数组转换成json
2015/06/26 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
Python实现字典的key和values的交换
2015/08/04 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
网络信息安全承诺书
2014/03/26 职场文书
建房协议书
2014/04/11 职场文书
无房证明范本
2014/09/17 职场文书
2015年检验科工作总结
2015/04/27 职场文书
教学质量月活动总结
2015/05/11 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
党校培训学习心得体会
2016/01/06 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL