package util;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*; /** 生成驗證碼圖片*/
public class ValidateCode extends HttpServlet
{ private Font imgFont=new Font("宋體",Font.BOLD,16);//設置字體 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } //設置瀏覽器不要緩存此圖片response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);/* * 在給定范圍內獲得隨機顏色 */ private Color getRandColor(int fc,int bc){ Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); }/public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String strCode =""; //驗證碼(字符串形式)int intCode =0; //驗證碼(數字形式)Random random = new Random();//隨機類//生成隨機四位數字intCode = (new Random()).nextInt(9999); if(intCode<1000){intCode+=1000; }//將數字轉化為字符串strCode=intCode+""; /** 繪圖*/response.setContentType("image/gif"); //獲得servlet輸出流ServletOutputStream servletOutputStream =response.getOutputStream(); //創建表示圖像的對象(參數是:寬、高、圖片類型)BufferedImage image=new BufferedImage(60,25,BufferedImage.TYPE_INT_RGB); //創建表示圖形上下文的對象 Graphics graph=image.getGraphics();//設置此圖形上下文的顏色graph.setColor(Color.blue); //設定矩形的橫、縱坐標,及寬、高graph.fillRect(1,1,48,18); //將此圖形上下文的字體設置為指定字體(參數為Font類型)graph.setFont(imgFont); //隨機產生10條干擾線,使圖象中的認證碼不易被其它程序探測到 graph.setColor(getRandColor(160,200)); for (int i=0;i<10;i++) { int x = random.nextInt(85); int y = random.nextInt(20); int xl = random.nextInt(12); int yl = random.nextInt(12); //在此圖形上下文的坐標系統中,使用當前顏色在點 (x,y) 和 (x1,y1) 之間畫一條線graph.drawLine(x,y,x+xl,y+yl); } //分解驗證碼字符串char c; for(int i=0;i<4;i++) { //返回驗證碼字符串指定索引處的char值(單個數字)c=strCode.charAt(i); //使用此圖形上下文的當前字體和顏色繪制由指定 string 給定的文本(x->文本的橫坐標,y->文本的縱坐標)graph.drawString(c+"",9*i+4,16); } //對servlet輸出流進行JPEG格式編碼JPEGImageEncoder imageEncoder=JPEGCodec.createJPEGEncoder(servletOutputStream); imageEncoder.encode(image); //將獲得的驗證碼字符串存入sessionHttpSession session=request.getSession(true); session.removeAttribute("VerifyCode"); session.setAttribute("VerifyCode",strCode); //關閉輸出流servletOutputStream.close(); } }
轉載于:https://www.cnblogs.com/xcxcxcxc/p/5541238.html