java取消 验证_java 验证码

步骤:

a.得到图片(ImageIcon)

b.创建画布(BufferedImage)

c.得到画笔(Graphics)

d.制作(drawImage\drawString\drawLine\drawOval)

e.释放画笔(dispose)

f.输出到页面(ImageIO)

在servlet中写,在jsp页面写显示代码

package com.zuxia.servlet;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.swing.ImageIcon;

public class RandomServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//得到验证码的背景图

ImageIcon random = new ImageIcon(this.getServletContext().getRealPath("/images/random.jpg"));

//得到画布

BufferedImage buf = new BufferedImage(random.getIconWidth(), random.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR);

//得到画笔

Graphics g = buf.getGraphics();

String str = "qwe0rt1yu2iop3asd4fgh5jkl6zx7cvbnm8ASDFGH9JKLQWERTYUIOPZXCVBNM";

StringBuffer sb = new StringBuffer();

Random ran = new Random();

for(int i=1;i<=4;i++){

sb.append(str.charAt(ran.nextInt(str.length())));

}

//制作

g.drawImage(random.getImage(), 0, 0, null);

g.setFont(new Font("黑体", Font.BOLD, 30));

g.drawString(sb.toString(), random.getIconWidth()/4, random.getIconHeight()/2+10);

//杂色

//产生随机线条线条(两点确定一条线)

for(int i=1;i<=10;i++){

int x1 = ran.nextInt(random.getIconWidth());

int y1 = ran.nextInt(random.getIconHeight());

int x2 = ran.nextInt(random.getIconWidth());

int y2 = ran.nextInt(random.getIconHeight());

g.drawLine(x1, y1, x2, y2);

}

//产生随机点

for(int i=1;i<=100;i++){

int x = ran.nextInt(random.getIconWidth());

int y = ran.nextInt(random.getIconHeight());

g.drawOval(x, y, 1, 1);

}

//释放

g.dispose();

//输出

OutputStream os = response.getOutputStream();

ImageIO.write(buf, "jpg", os);

os.close();

}

}

第二种(自己画.不引用图片)

package Upload;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.sun.org.apache.commons.digester.rss.Image;

public class AuthCode extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//定义画布的宽和高

int width =90;

int height=30;

//创建一个画布

BufferedImage buffimage=new BufferedImage(width, height,BufferedImage.TYPE_3BYTE_BGR );

//创建画笔

Graphics g =buffimage.getGraphics();

//产生随机数(四个)

String str = "qwe0rt1yu2iop3asd4fgh5jkl6zx7cvbnm8ASDFGH9JKLQWERTYUIOPZXCVBNM";

StringBuffer sb = new StringBuffer();

Random ran = new Random();

for(int i=1;i<=4;i++){

sb.append(str.charAt(ran.nextInt(str.length())));

}

request.getSession().setAttribute("yzm", sb.toString());

//设置矩形颜色的背景色

g.setColor(new Color(113, 191, 234));

//制作矩形的被背景

g.fillRect(0, 0, width, height);

//设置边框

//设置边框颜色

g.setColor(Color.black);

g.drawRect(0, 0, width-1, height-1);

//制作

g.drawImage(buffimage, buffimage.getType(), 0, 0, height, null, null);

g.setFont(new Font("黑体", Font.BOLD, 30));A

g.drawString(sb.toString(), buffimage.getTileWidth()/8, buffimage.getHeight()/2+10);

//杂色

//线

for(int i=1;i<=10;i++){

int x1 = ran.nextInt(buffimage.getTileWidth());

int y1 = ran.nextInt(buffimage.getHeight());

int x2 = ran.nextInt(buffimage.getTileWidth());

int y2 = ran.nextInt(buffimage.getHeight());

g.drawLine(x1, y1, x2, y2);

}

//点

for(int i=1;i<=100;i++){

int x = ran.nextInt(buffimage.getTileWidth());

int y = ran.nextInt(buffimage.getHeight());

g.drawOval(x, y, 1, 1);

}

//创建输出流对象

OutputStream out =response.getOutputStream();

ImageIO.write(buffimage,"jpg",out);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值