生成隨機數字的圖片驗證碼
阿新 • • 發佈:2019-02-17
第一步:
首先先寫一個驗證碼圖片生成類CreateAuthCode
第二步:package com.sunsheng.commons; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; public class CreateAuthCode extends BufferedImage { private Graphics graphics; private int width; private int height; public CreateAuthCode(int width, int height, int imageType) { super(width, height, imageType); this.width = width; this.height = height; graphics = getGraphics(); //設定圖片的背景顏色 setBgColor(); //給圖片設定一個邊框 setBorder(); //往圖片中寫入字串 setText(); } private void setBorder() { //設定邊框的顏色 graphics.setColor(Color.RED); //為了防止邊框寫到圖片外面,所以處理一下 graphics.drawRect(1, 1, width - 2, height - 2); } private void setBgColor() { graphics.setColor(Color.WHITE); //往矩形區域填充設定的顏色 graphics.fillRect(0, 0, width, height); } private void setText() { graphics.setColor(Color.BLUE); //設定檔案的字型 graphics.setFont(new Font("宋體", Font.BOLD, 60)); // graphics.drawString("中國", 10, 80); int x = 10; //往圖片中寫入4個隨機的整數(0~9) for (int i = 0; i < 4; i++) { int num = new Random().nextInt(10); //座標是字串左下角的那個點 graphics.drawString(String.valueOf(num), x, 65); //數字字串是半形格式佔30個畫素,每個字串之間距離10個畫素,所以x軸要右移40畫素 x += 40; } } }
在Servlet中輸入圖片
package com.sunsheng; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sunsheng.commons.CreateAuthCode; public class AuthCode extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設定http響應頭,告訴瀏覽器伺服器傳送的是一個jpeg格式的圖片 resp.setHeader("content-type", "image/jpeg"); //在記憶體中建立一個圖片 //呼叫ImageIO工具的write方法把圖片從記憶體寫到Response的OutputStream中 ImageIO.write(new CreateAuthCode(180, 80, BufferedImage.TYPE_INT_RGB) , "jpg" , resp.getOutputStream()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }