package com.fgkj.servlets;
|
|
import java.awt.Color;
|
import java.awt.Font;
|
import java.awt.Graphics;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayOutputStream;
|
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 sun.misc.BASE64Encoder;
|
|
public class IdentifyingServlet 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 {
|
|
//服务器通知浏览器不要缓存
|
response.setHeader("pragma","no-cache");
|
response.setHeader("cache-control","no-cache");
|
response.setHeader("expires","0");
|
|
//在内存中创建一个长80,宽30的图片,默认黑色背景
|
//参数一:长
|
//参数二:宽
|
//参数三:颜色
|
int width = 80;
|
int height = 30;
|
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
|
|
//获取画笔
|
Graphics g = image.getGraphics();
|
//设置画笔颜色为灰色
|
g.setColor(Color.GRAY);
|
//填充图片
|
g.fillRect(0,0, width,height);
|
|
//产生4个随机验证码,12Ey
|
String checkCode = getCheckCode();
|
//将验证码放入HttpSession中
|
request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
|
|
//设置画笔颜色为黄色
|
g.setColor(Color.YELLOW);
|
//设置字体的小大
|
g.setFont(new Font("黑体",Font.BOLD,24));
|
//向图片上写入验证码
|
g.drawString(checkCode,15,25);
|
|
//将内存中的图片输出到浏览器
|
//参数一:图片对象
|
//参数二:图片的格式,如PNG,JPG,GIF
|
//参数三:图片输出到哪里去
|
//ImageIO.write(image,"PNG",response.getOutputStream());
|
String png_base64=BufferedImageToBase64(image);
|
OutputStream stream = response.getOutputStream();
|
stream.write(png_base64.getBytes("UTF-8"));
|
|
}
|
/**
|
* 产生4位随机字符串
|
*/
|
private String getCheckCode() {
|
String base = "0123456789ABCDEFGHIJKLMNOPQRSTIVWXYZabcdefghijklmnopqrstuvwxyz";
|
int size = base.length();
|
Random r = new Random();
|
StringBuffer sb = new StringBuffer();
|
for(int i=1;i<=4;i++){
|
//产生0到size-1的随机值
|
int index = r.nextInt(size);
|
//在base字符串中获取下标为index的字符
|
char c = base.charAt(index);
|
//将c放入到StringBuffer中去
|
sb.append(c);
|
}
|
return sb.toString();
|
|
}
|
//BufferedImage转为base64字符串
|
private String BufferedImageToBase64(BufferedImage image){
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
|
try {
|
ImageIO.write(image, "png", baos);
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}//写入流中
|
byte[] bytes = baos.toByteArray();//转换成字节
|
BASE64Encoder encoder = new BASE64Encoder();
|
String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
|
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
|
|
// ImageIO.write(bufferedImage, "png", new File("D:/qrcode1.png"));
|
//System.out.println("值为:"+"data:image/jpg;base64,"+png_base64);
|
return "data:image/jpg;base64,"+png_base64;
|
}
|
}
|