Java实现登录界面的验证码
程序员文章站
2024-03-22 23:09:58
...
首先我们创建一个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">)
下面是效果图
上一篇: 再说Swing系列之登录界面的基本实现