java验证码
来源:互联网 发布:印刷打稿软件 编辑:程序博客网 时间:2024/06/09 10:36
package xf.web;import java.awt.*;import java.awt.geom.*;import java.awt.image.*;import java.io.*;import java.util.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import javax.imageio.ImageIO;public class DrawImage extends HttpServlet { private static final long serialVersionUID = 1L; public DrawImage() { super(); } public void destroy() { super.destroy(); } public void init() throws ServletException { super.init(); } /*该方法主要作用是获得随机生成的颜色*/ public Color getRandColor(int s,int e){ Random random=new Random (); if(s>255) s=255; if(e>255) e=255; int r,g,b; r=s+random.nextInt(e-s);//随机生成RGB颜色中的r值 g=s+random.nextInt(e-s);//随机生成RGB颜色中的g值 b=s+random.nextInt(e-s);//随机生成RGB颜色中的b值 return new Color(r,g,b); } @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置不缓存图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); //指定生成的响应图片,一定不能缺少这句话,否则错误. response.setContentType("image/jpeg"); int width=86,height=25;//指定生成验证码的宽度和高度 BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//创建BufferedImage对象,其作用相当于一图片 Graphics g=image.getGraphics();//创建Graphics对象,其作用相当于画笔 Graphics2D g2d=(Graphics2D)g;//创建Grapchics2D对象 Random random=new Random(); Font mfont=new Font("console",Font.BOLD,16);//定义字体样式 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height);//绘制背景 g.setFont(mfont);//设置字体 g.setColor(getRandColor(180,200)); //绘制100条颜色和位置全部为随机产生的线条,该线条为2f for(int i=0;i<100;i++){ int x=random.nextInt(width-1); int y=random.nextInt(height-1); int x1=random.nextInt(6)+1; int y1=random.nextInt(12)+1; BasicStroke bs=new BasicStroke(2f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//定制线条样式 Line2D line=new Line2D.Double(x,y,x+x1,y+y1); g2d.setStroke(bs); g2d.draw(line);//绘制直线 } //输出由英文,数字 随机组成的验证码。 String sRand=""; String ctmp=""; int itmp=0; //制定输出的验证码为四位 for(int i=0;i<4;i++){ switch(random.nextInt(2)){ case 0://生成A-Z的字母 itmp=random.nextInt(26)+65; ctmp=String.valueOf((char)itmp); break; default://0-9 String[] rBase={"0","1","2","3","4","5","6","7","8","9"}; int x = random.nextInt(10); ctmp = rBase[x]; break; } sRand+=ctmp; Color color=new Color(20+random.nextInt(110),20+random.nextInt(110),random.nextInt(110)); g.setColor(color); //将生成的随机数进行随机缩放并旋转制定角度 PS.建议不要对文字进行缩放与旋转,因为这样图片可能不正常显示/*将文字旋转制定角度*/ Graphics2D g2d_word=(Graphics2D)g; AffineTransform trans=new AffineTransform(); trans.rotate((45) * 3.14 / 180, 15 * i + 8, 7); g2d_word.setTransform(trans); g.drawString(ctmp, 15*i+18, 14); } HttpSession session=request.getSession(true); session.setAttribute("randCheckCode", sRand);//设置一个变量的值,你以后可用getAttribute()来获取和使用它 g.dispose();//释放g所占用的系统资源 ImageIO.write(image,"jpeg",response.getOutputStream());//输出图片 }}
0 0
- java验证码 验证
- JAVA 验证码
- java验证码类
- java随机验证码
- JAVA中文验证码
- java 实现验证码
- java验证码
- java生成验证码
- java验证码代码
- java验证码汇总
- Java彩色验证码
- java验证码代码
- java图片验证码
- java图片验证码
- java验证码
- java 中的验证码
- java验证码汇总
- java图片验证码
- Andorid ApI文档打开慢的问题解决
- 学 iOS 开发的一些经验
- iOS 开发的9个超有用小技巧
- git查看commit的内容
- Beat the Spread!
- java验证码
- eclipse优化之eclipse验证设置,让eclipse跑得更快
- Android Service的生命周期
- 小白书之拓扑排序
- ZOJ 3818 Pretty Poem (2014年牡丹江赛区网络赛J题)
- 棋盘问题(POJ--1321
- 装饰者模式
- PAT 1039. Course List for Student (25)
- IOS开发笔记-01按钮操作-03.加法计算器界面搭建