JSP随机验证图片如何制作
小编整理了一篇关于模仿腾讯随机验证图片的文章。下面直接上代码吧!一个Java类和一个JSP页面。
Java类代码:
以下是JSP模仿腾讯随机验证图片引用片段:
packageicewee.image;
importjava.awt.BasicStroke;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics2D;
importjava.awt.RenderingHints;
importjava.awt.geom.Line2D;
importjava.awt.image.BufferedImage;
importjava.util.Random;
publicclassTokenUtil{
privatestaticfinalStringbase="23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefhijklmnpqrstuvwxyz";
privatestaticfinalintlength=base.length();
publicstaticBufferedImagecreateTokenImage(intwidth,intheight,
StringrandomCode){
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphics2Dg=image.createGraphics();
Randomrandom=newRandom();
g.setColor(newColor(230,230,250));//设置背景色
g.fillRect(0,0,width,height);//填充背景
g.setColor(Color.BLACK);
//绘制边缘
g.drawRect(-1,-1,width+1,height+1);
g.setColor(Color.GRAY);
//设置字体,随机选择字体,暂设置8种字体
Fontfont=newFont((newString[]{"Arial","ArialBlack",
"ArialItalic","CourierNew","CourierNewBoldItalic",
"CourierNewItalic","FranklinGothicMedium",
"FranklinGothicMediumItalic"})[random.nextInt(8)],
Font.PLAIN,30);
//g.setStroke(newBasicStroke((float)(Math.random()),
//BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g.setFont(font);
//定义字体颜色范围
intred=random.nextInt(160),green=random.nextInt(50),blue=random
.nextInt(50);
//定义一个无干扰线区间和一个起始位置
intnor=random.nextInt(50),rsta=random.nextInt(131);
//绘制干扰正弦曲线M:曲线平折度,D:Y轴常量V:X轴焦距
intM=random.nextInt(15)+5,D=random.nextInt(23)+15,V=random
.nextInt(5)+1;
doublex=0.0;
doubley=M*Math.sin(Math.toRadians(V*x))+D;
doublepx,py;
for(inti=0;i<131;i++){
px=x+1;
py=M*Math.sin(Math.toRadians(V*px))+D;
if(rsta<i&&i<(rsta+nor))
g.setColor(newColor(230,230,250));
else
g.setColor(newColor(red,green,blue));
//随机设置像素点宽带(线宽)
g.setStroke(newBasicStroke((float)(Math.random()+1.5f)));
g.draw(newLine2D.Double(x,y,px,py));
x=px;
y=py;
}
char[]codes=randomCode.toCharArray();
for(inti=0;i<codes.length;i++){
//旋转图形
intdegree=(random.nextInt(20)-10)%360;
doubleang=degree*0.0174532925;//将角度转为弧度
g.rotate(ang,width/2,height/2);
g.setColor(newColor(red,green,blue));
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
intgr=random.nextInt(8);
g.drawString(String.valueOf(codes[i]),24*i+10+gr,38);
}
g.dispose();
returnimage;
}
publicstaticStringcreateRandomCode(intsize,intwidth,intheight){
StringBufferrandomCode=newStringBuffer();
for(inti=0;i<size;i++){
Randomrandom=newRandom();
intstart=random.nextInt(length);
StringstrRand=base.substring(start,start+1);
randomCode.append(strRand);
}
returnrandomCode.toString();
}
}
JSP页面:
以下是JSP模仿腾讯随机验证图片代码引用片段:
<%@pagecontentType="image/jpeg"pageEncoding="GBK"%>
<%@pageimport="java.awt.image.BufferedImage"%>
<%@pageimport="javax.imageio.ImageIO"%>
<%@pageimport="com.icesoft.image.TokenUtil"%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
intwidth=120,height=50;
StringrandomCode=TokenUtil.createRandomCode(4,width,height);
System.out.println("生成的随机码:"+randomCode);
BufferedImageimage=TokenUtil.createTokenImage(width,height,randomCode);
ImageIO.write(image,"JPEG",response.getOutputStream());
response.flushBuffer();
out.clear();
out=pageContext.pushBody();
%>
以上就是JSP模仿腾讯随机验证图片全部代码,希望对大家的学习有所帮助。