一、应用场景
在 WEB 网站中,图片验证码经常被用来防止恶意地用户注册、发帖等场景。在 PHP 中,图片验证码主要是通过 GD 库提供的 API 来完成的。
二、实现的方法
验证码一般都是随机的数字和字母组合的,可以通过随机函数,十六进制函数 dechex 简单实现。最关键的问题还是怎样生成图片。
<?php //生成随机数-》创建图片-》随机数写进图片 -》输出到浏览器 for($i=0;$i<4;$i++) { $rand .= dechex(rand(1,15)); } $im = imagecreatetruecolor(100,30);// 新建一个真彩色图像 x就是宽 ,y就是高 //设置颜色 // 为一幅图像分配颜色(相当于 PhotoShop 的调色板) // imagecolorallocate ( resource image, int red, int green, int blue ) 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。 $bg = imagecolorallocate($im,0,0,0);//第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色。代表了由给定的 RGB 成分组成的颜色 $te = imagecolorallocate($im,225,225,225); //把字符串写在图像左上角 //绘图函数 imagestring ( resource image, font, int x, int y, string s, int col ) //用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。 imagestring($im,5,rand(3,70),rand(0,16),$rand,$te); //直接输出图像到浏览器 header("Content-type: image/jpeg"); // imagejpeg ( resource image [, string filename [, int quality]] ) filename 参数为可选,如果省略,则原始图像流将被直接输出。要省略 filename 参数而提供 quality 参数,使用空字符串('')。通过 header() 发送 Content-type: image/jpeg 可以使 PHP 脚本直接输出 JPEG 图像。 imagejpeg($im); ?>
三、制作复杂的图片验证码
有时验证码为了防止被一些图片识别工具识别,必须设置一些干扰。例如在图片上随机加上一些线条或者点。这主要通过 imageline() 和 imagesetpixel() 函数来实现。甚至制作中文验证码。
<?php for($i=0;$i<4;$i++) { $rand .= dechex(rand(1,15)); } $im = imagecreatetruecolor(100,30); $bg = imagecolorallocate($im,0,0,0); $te = imagecolorallocate($im,225,225,225); //画线条 for($i=0; $i<3; $i++){ $te2 = imagecolorallocate($im,rand(0,225),rand(0,225),rand(0,225)); //imageline ( resource image, int x1, int y1, int x2, int y2, int color ) 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。 imageline($im,rand(0,100),0,rand(0,100),rand(0,30),$te2); } //画点 for($i = 0; $i < 100; $i++){ //imagesetpixel ( resource image, int x, int y, int color ) 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。 imagesetpixel($im,rand()%100,rand()%30,$te2); } $str = iconv("gbk","UTF-8","验证码");//把gbk编码转换成UTF-8,如果文件的编码是 UTF-8,则不需要这一步。因为我们的系统(Windows)自带的字体默认是用国际通用编码(UTF-8)模式来识别的,所以如果不做编码转换,可能无法正常显示。 imagettftext($im,12,rand(0,10),20,20,$te,'msyh.ttf',$str);//rand(3,10)倾斜度。msyh.ttf 是微软雅黑字体,可在 C:\Windows\Fonts (Windows XP、Windows 7)找到。然后拷贝到该文件的目录。Windows 下之所以能够显示中文,是因为系统安装了中文字体 header("Content-type: image/jpeg"); imagejpeg($im); ?>
原文链接:http://woqilin.blogspot.com/2012/10/php-5.html
相关推荐
PHP100视频教程33:PHP5中图片验证码的制作(上).rar
关于php的验证码制作ppt,可做教学用
PHP实现图片验证码制作 一、开发环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3。 二、主要技术 本实验主要使用while循环、GD库和函数的封装和调用实现迷宫的...
2、部分GD库函数的介绍 imagecreatetruecolor 新建一个真彩色图像 imagecolorallocate 为一幅图像分配颜色(调色板) imagestring 绘图函数3、学习:随机函数,十六进制函数4、GD+SESSION制作PHP验证码 生成...
本案例主要基于PHP中的GD库来实现验证码的制作。 GD(graphic device)库是PHP处理图形的扩展库,GD库提供了一系列用来处理图片的api,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者...
12(PHP图像的制作,例如验证码)配套一字体
验证码制作,包括加点划线,中文验证码,图片剪切,图片水印等 验证码制作,包括加点划线,中文验证码,图片剪切,图片水印等
很全面,很强大的php操作图片类,所有功能都有,附带demo案例
最近正在学习php入门,现在刚入门,所以许多都不知道,就从最基础的学起,不会的上网查,然后把它记在这个法宝内
3种不同风格的php制作的验证码,已经整理好,用于登陆验证等
PHP100视频教程33:PHP5中图片验证码的制作(上) PHP100视频教程34:PHP5中图片中文验证码(下) PHP100视频教程35:PHP5文字图片混合水印与缩略图 PHP100视频教程36:PHP中正则表达式学习及应用(一) PHP100...
由于注册的时候常常会用到注册码来防止机器恶意注册,这里我发表一个产生png图片验证码的基本图像,简单的思路分析: 1、产生一张png的图片 2、为图片设置背景色 3、设置字体颜色和样式 4、产生4位数的随机的验证码...
选取一张图片作为模板,利用SAE中PHP的GD库,画出前台用户提交的内容,返回给前台浏览器进行展示。 GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以创建图片、处理图片。在网站上GD库...
256色BMP图片验证码识别脚本,php编程学习源码,web网页制作参考资料。
33:PHP5中图片验证码的制作(上) 34:PHP5中图片中文验证码(下) 35:PHP5文字图片混合水印与缩略图 36:PHP中正则表达式学习及应用(一) 37:PHP中正则表达式学习及应用(二) 38:PHP中正则表达式学习及应用...
本文实例讲述了PHP 图像处理与SESSION制作超简单验证码的方法。分享给大家供大家参考,具体如下: 验证码的实现 首先我们要清楚,无论是做什么东西,在做之前一定要有思路,譬如这个验证码里他有些什么,为了实现它...
在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。 ...
2,创建图片 用图片创建函数确定,所创建的图片大小。 例如$im = imagecreatetruecolor(100,30);其中坐标100,30是以网页左上角为原点,$im为图片变量了。 3,设置颜色 使用函数 创建背景色。例如$bg = ...
PHP无框架,原生傻瓜式制作简易Api接口, 封装MySQL增删改查,图片上传,图形验证码生成,token验证,json统一返回格式。 项目地址:https://gitee.com/abmo2o/php-api-demo 此文件和使用方法仅适用于入门级在校大...
这是一个用php编写的非常非常简单的验证码制作器!这个怎么运作? 这将使用随机 Captcha 字符串随机制作一张 png 图片,并将验证码值存储在 SESSION 变量中,并使用输入的验证码检查用户输入的验证码 SESSION VALUE...