Java实现登录界面的验证码

首先我们创建一个GetRandImage类用来获取随机验证码和图片

package com.zhu.util;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

public class GetRandImage {
	private int width;
	private int height;
	private String rand;
	public GetRandImage(int width,int height){
		this.width=width;
		this.height=height;
	}
	public BufferedImage createRandImage(){  //创建验证码图片
		Graphics2D g2d=(Graphics2D)new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB).getGraphics();
		//创建背景透明的图片
		BufferedImage image=g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
		g2d=image.createGraphics();
		Random random=new Random();
		Color color;
		for(int i=0;i<200;i++){      //画200个小圆点用来干扰读取验证码
			int x=random.nextInt(width);
			int y=random.nextInt(height);
			color=new Color(random.nextInt(120)+130,random.nextInt(120)+130,random.nextInt(120)+130);
			g2d.setColor(color);
			g2d.fillOval(x, y, 2, 2);
		}
		g2d.setFont(new Font("宋体",1, 30));
		for(int i=0;i<4;i++){
			int x=random.nextInt(10);   //随机产生验证码
			rand+=x;
			color=new Color(random.nextInt(130),random.nextInt(130),random.nextInt(130));
			g2d.setColor(color);
			g2d.drawString(x+"",8+i*21,30);
		}
		g2d.dispose();
		return image;
	}
	public String getRand(){    //获取验证码
		return rand;
	}
    //先用一个main函数测试能后生成我们需要的图片
   public static void main(String[] args) {
		System.out.println("好了");
		GetRandImage get=new GetRandImage(100, 40);
		BufferedImage image=(BufferedImage)get.createRandImage();
		File file=new File("e://my.jpg");
		
		try {
			ImageIO.write(image, "png", file);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
然后创建一个  image.jsp文件   contentType="image/jpeg"表示要jsp输出的内容为图片

<%@ page language="java" contentType="image/jpeg"%>
<%@page import="com.zhu.util.GetRandImage,javax.imageio.ImageIO,java.awt.image.BufferedImage,java.util.*" %>
<% 
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
	GetRandImage get=new GetRandImage(100,40);
	BufferedImage image=get.createRandImage();
	String randString=get.getRand();
	session.setAttribute("randString", randString);
	ImageIO.write(image, "png", response.getOutputStream());
	out.clear();
	out = pageContext.pushBody();
%>

此时我们就可以写一个登录界面用来看看我们的验证码是什么效果(只需要一个img标签即可显示,<img   alt="" src="image.jsp">)

下面是效果图


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值