zoukankan      html  css  js  c++  java
  • 两个简单的画验证码图形程序

     其实,生成验证码比较简单,画图也不难,不过大家都不喜欢读手册,也不喜欢自己动手,一般是网上抄一段代码了事,我一直如此,偶尔画图,其实发现画图挺有趣。
       不过拿普通字体生成的验证码,是没有太大的“战斗力”的,很轻易的就会验证码识别程序识别内容,然后轻易被灌水,要生成好的验证码图片不是简单的事情,有些大公司专门一个部门去做这么一件事情,不过我这里只是了解演示,一般用途应该就够用了吧,呵呵。

       下面两个函数,一个能够画出中文内容,另外一个能够画出英文内容,按照需要使用。

    1. /** 
    2.  * 生成中文字符, 
    3.  * 
    4.  * 必须有GD库、iconv或者mbstring库、相应的字体文件 
    5.  */  
    6. function makeChineseCharPic($str = '中文字符'){  
    7.     //转码  
    8.     if (function_exists('iconv')){  
    9.         $str = iconv('gbk''utf-8'$str);  
    10.     }elseif (function_exists('mb_convert_encoding')){  
    11.         $str = mb_convert_encoding($str'utf-8''gbk');  
    12.     }else{  
    13.         exit("Not iconv charset");  
    14.     }  
    15.   
    16.     //产生图片  
    17.     $im = imageCreate(80, 30);  
    18.     //背景色  
    19.     $bkg = imageColorAllocate($im, 0, 255, 255);  
    20.     //字体色  
    21.     $clr = imageColorAllocate($im, 0, 128, 255);  
    22.     //字体文件路径  
    23.     $font = "c:/windows/fonts/simhei.ttf";  
    24.     //使用字体来画TTF内容  
    25.     imageTTFText($im, 13, 0, 5, 20, $clr$font$str);  
    26.     //--------------------------------------------------  
    27.     // 黑体:simhei.ttf, 宋体:simsun.ttc, 隶书:simli.ttf, 楷体:simkai.ttf, 幼圆:simyou.ttf  
    28.     // 华文行楷:stxingka.ttf, 华文新魏:stxinwei.ttf, 华文彩云:stcaiyun.ttf, 华文仿宋:stfangso.ttf  
    29.     // 方正姚体:fzytk, 方正舒体:fzstk.ttf  
    30.     //--------------------------------------------------      
    31.   
    32.     //输出后清除资源  
    33.     header("Content-type: image/png");  
    34.     imagePng($im);  
    35.     imageDestroy($im);  
    36. }  
    37.   
    38. /** 
    39.  * 画英文字符 (必须有GB库) 
    40.  */  
    41. function makeEnglishCharPic($str = 'ABCD12'){  
    42.   
    43.     //生成图片  
    44.     $im = imageCreateTrueColor(65, 20);  
    45.     //背景色  
    46.     $bg = imageColorAlLocate($im, 0, 0, 0);  
    47.     //字体色  
    48.     $textColor = imageColorAlLocate($im, 0, 255, 255);  
    49.     //画图  
    50.     imageString($im, 5, 5, 2, $str$textColor);  
    51.   
    52.     //输出后清除资源  
    53.     header("Content-type: image/jpeg");  
    54.     imageJpeg($im);  
    55.     imageDestroy($im);  
    56. }  


       当然,我们可以加入一些干扰因子,或者是对图片进行变形,让那些图片识别程序无法识

  • 相关阅读:
    (七)策略模式详解
    (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
    递归锁,死锁,使用递归锁解决死锁,信号量
    并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
    线程了解以及创建线程的Threading模块中的部分方法
    进程 >> 互斥锁、队列与管道、生产者消费者模型
    进程比较基础的内容
    基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
    网络基础 + 简易服务端和客户端
    单例模式
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126752.html
Copyright © 2011-2022 走看看