PHP构造验证码

代码如下:

<?php
header('Content-type:image/jpeg');
$width=120;
$height=40;
$element=array('a','b','c','d','e','f','g','h','i','j','k','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$string='';
for ($i=0;$i<5;$i++){
<span style="white-space:pre">	</span>$string.=$element[rand(0,count($element)-1)];
}
$img=imagecreatetruecolor($width, $height);//设置图片大小
$colorBg=imagecolorallocate($img,rand(200,255),rand(200,255),rand(200,255));//随机产生背景色
$colorBorder=imagecolorallocate($img,rand(200,255),rand(200,255),rand(200,255));//随机产生背景色
$colorString=imagecolorallocate($img,rand(10,100),rand(10,100),rand(10,100));
imagefill($img,0,0,$colorBg);//设置图片背景色
imagerectangle($img,0,0,$width-1,$height-1,$colorBorder);//构建矩形边框
for($i=0;$i<100;$i++){//画一百个小像素
<span style="white-space:pre">	</span>imagesetpixel($img,rand(0,$width-1),rand(0,$height-1),imagecolorallocate($img,rand(100,200),rand(100,200),rand(100,200)));//画一个单一的像素
}
for($i=0;$i<3;$i++){//画三条随机线
<span style="white-space:pre">	</span>imageline($img,rand(0,$width/2),rand(0,$height),rand($width/2,$width),rand(0,$height),imagecolorallocate($img,rand(100,200),rand(100,200),rand(100,200)));
<span style="white-space:pre">	</span>//前两个为起点坐标,后两个为终点坐标,起点控制在左半边,终点控制在右半边
}
//imagestring($img,5,0,0,'abcd',$colorString);
imagettftext($img,14,rand(-5,5),rand(5,15),rand(30,35),$colorString,'font/SketchyComic.ttf',$string);//绘制文字,可以选择丰富的字体的方法
//说明:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
imagejpeg($img);
imagedestroy($img);

重点介绍imagettftext()方法:

array
imagettftext ( resource$image ,float$size ,float$angle
,int$x ,int$y ,int$color
,string$fontfile ,string$text )

image
图像资源。见 imagecreatetruecolor()。
size
字体大小。根据 GD 版本不同,应该以像素大小指定(GD1)或点大小(GD2)。
angle
角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。
x
xy 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和imagestring() 不同,其 x,y 定义了第一个字符的左上角。例如
"top left" 为 0, 0。
y
Y 坐标。它设定了字体基线的位置,不是字符的最底端。
color
颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见 imagecolorallocate()。
fontfile
是想要使用的 TrueType 字体的路径。 根据 PHP 所使用的 GD 库的不同,当fontfile 没有以/ 开头时则
.ttf 将被加到文件名之后并且会在库定义字体路径中尝试搜索该文件名。当使用的 GD 库版本低于 2.0.18 时,一个空格字符 而不是分号将被用来作为不同字体文件的“路径分隔符”。不小心使用了此特性将会导致一条警告信息:Warning: Could not find/open font。对受影响的版本来说唯一解决方案就是将字体移动到不包含空格的路径中去。

很多情况下字体都放在脚本的同一个目录下。下面的小技巧可以减轻包含的问题。

<?php

// Set the enviroment variable for GD

putenv(‘GDFONTPATH=‘ . realpath(‘.‘));

// Name the font to be used (note the lack of the .ttf extension)

$font = ‘SomeFont‘;

?>

text
文本字符串。 可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。

imagettftext() 返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。

Example #1 imagettftext() 例子

本例中的脚本将生成一个白色的 400x30 像素 PNG 图像,其中有黑色(带灰色阴影)Arial 字体写的“Testing...”。

<?php

// Set the content-type

header("Content-type: image/png");

// Create the image

$im = imagecreatetruecolor(400, 30);

// Create some colors

$white = imagecolorallocate($im, 255, 255, 255);

$grey = imagecolorallocate($im, 128, 128, 128);

$black = imagecolorallocate($im, 0, 0, 0);

imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw

$text = ‘Testing...‘;

// Replace path by your own font path

$font = ‘arial.ttf‘;

// Add some shadow to the text

imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text

imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()

imagepng($im);

imagedestroy($im);

?>

时间: 2024-11-03 16:21:16

PHP构造验证码的相关文章

Python快速开发分布式搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别

第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/... 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow==3.4.2 jupyter==1.0.0 matplotlib==1.5.3 numpy==1.12.1 scikit-learn==0.18.1 tensorflow==1.0.1 h5py==2.6.0 numpy-1.13.1+mkl 我们用豆瓣园来加速安以上依赖装如: pip install

用Java画简单验证码

以下是具体代码: package com.jinzhi.tes2; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.I

springMVC验证码程序

原文地址:http://my.oschina.net/u/1757031/blog/488322 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import jav

javaweb之验证码

看了尚硅谷佟刚老师讲的httpsession应用中的验证码,总觉得一遍又一遍的写这些东西实在没意思,所有就简单封装了一个验证码生成器,默认支持纯数字.纯字母.数字字母组合.简单的10以内的加减乘的验证码. 先声明:代码中BufferedImage等的生成部分和一些对验证码的修饰都是来自佟刚老师的代码! 下载jar包: http://files.cnblogs.com/huyongliang/codeGenerator.zip 来个截图: 一 结构概览 CheckCode类是这个工具包的抽象父类,

java验证码增加用户读取验证码的难度和干扰效果

package com.sec.control; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random; import javax.imageio.ImageIO;i

Java验证码和ajax判断

关于来了解相关的api BufferedImage(int width, int height, int imageType) 构造一个类型为预定义图像类型之一的 BufferedImage. BufferedImage 描述具有可访问图像数据缓冲区的Image 字段摘要(TYPE_INT_RGB)表示一个图像,它具有合成整数像素的 8 位 RGB 颜色分量. getGraphics() 此方法返回 Graphics2D(Graphics2D 类扩展 Graphics 类,以提供对几何形状.坐标

用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用. ubuntu上安装: sudo apt-get install tesseract-ocr 非常简单. 2.pytesseract和PIL(pillow) pytesseract用来在python中调用tesseract-ocr,PIL(pillow)用来加载图片,安装方法如下: pip3 in

Java验证码代码

1 public class VerifyCodeController { 2 3 private int width = 90;//定义图片的width 4 private int height = 20;//定义图片的height 5 private int codeCount = 4;//定义图片上显示验证码的个数 6 private int xx = 15; 7 private int fontHeight = 18; 8 private int codeY = 16; 9 char[]

Tomcat配置虚拟主机后的登录验证码问题

先描述一下问题现象,在本地测试运行一个java web网站,一切正常.但把网站部署到Linux服务器上后,发现登录出了问题,提示验证码输入不正确.登录时需要输入验证码,而验证码的原值是先存入session中的,然后点击[登录]后,会对比用户输入的验证码与原值,可此时查看日志发现,从session获取验证码为null. 起先本人惯性地认为是代码的问题,可换了几种写法之后,仍然存在这种现象,仔细想了下服务器与本地环境的差异,锁定了一个点,服务器的域名跟本地是不同的,服务器上的tomcat设置了虚拟主