java实现生成验证码图片

1.将图片验证码生成到本地的例子;

 

package demo;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * @author zml2015
 * @Time:2015年12月25日 下午9:29:44
 * @version 1.0
 */
public class test {

	public static void main(String[] args) {
		
	BufferedImage image=new BufferedImage(70, 25, BufferedImage.TYPE_INT_BGR);
	//相当于得到一支笔
	Graphics graphics=image.getGraphics();
	graphics.setColor(Color.black);
	graphics.fillRect(0, 0, 70, 30);
	String randomString="";
	Random random=new Random();
	for(int i=0;i<5;i++){
			//	0~9随机数
		int num=random.nextInt(10);
		//A-Z,a-z随机字母
		char ch=(char) (random.nextInt(52)+65);
		String []array={num+"",ch+""};
		//随机取出一个,可能是数字,可能是字母
		randomString+=array[random.nextInt(2)];
		
	}
	//设置画笔的颜色
	graphics.setColor(Color.red);
	//设置字体的属性
	graphics.setFont(new Font(Font.SERIF, Font.TYPE1_FONT, 25));
	//将随机字符画到图片上
	graphics.drawString(randomString, 5, 18);
	//在G盘的upload目录下生成该图片
	File file =new File("G:/upload/验证码.png");
	try {
		ImageIO.write(image, "png", file);
		System.out.println("成功");
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		System.out.println("失败");
	}

	}

}

2.一般我们都是将生成的验证码在页面中通过<img src="验证码图片地址"/>引入的,即,需要将其放到页面中;再用用File file =new File()的方式就不太合适了,可以用response.getOutputStream()的形式;当然了在web.xml中还要有相应的配置servlet映射

 

 

package org.zml.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author zml2015
 * @Time:2015年12月26日 下午12:05:53
 * @version 1.0
 */
public class GetCode extends HttpServlet {

	
	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {

		BufferedImage image=new BufferedImage(80, 25, BufferedImage.TYPE_INT_BGR);
		Graphics graphics=image.getGraphics();
		graphics.setColor(Color.black);
		graphics.fillRect(0, 0, 80, 30);
		String randomString="";
		Random random=new Random();
		for(int i=0;i<5;i++){
				//	0~9随机数
			int num=random.nextInt(10);
			//A-Z,a-z随机字母
			char ch1=(char) (random.nextInt(26)+65);
			char ch2=(char) (random.nextInt(26)+97);
			String []array={num+"",ch1+"",ch2+""};
			//随机取出一个,可能是数字,可能是字母
			randomString+=array[random.nextInt(3)];
			
		}
		//设置画笔的颜色
		graphics.setColor(Color.red);
		//设置字体的属性
		graphics.setFont(new Font(Font.SERIF, Font.TYPE1_FONT, 25));
		//将随机字符画到图片上
		graphics.drawString(randomString, 5, 18);
		File file =new File("G:/upload/验证码.png");
		try {
			ImageIO.write(image, "png", res.getOutputStream());
			System.out.println("成功");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("失败");
		}

		
		}
		
		
	
	
	
	

}

 


web.xml的配置:

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>demo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
  <servlet-name>getCode</servlet-name>
  <servlet-class>org.zml.servlet.GetCode</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>getCode</servlet-name>
  <url-pattern>/image</url-pattern>
  </servlet-mapping>
</web-app>

 

 

 

 

 

例子打包下载

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值