简单验证码的原理
BufferedImage 子類描述具有可訪問圖像數據緩沖區的 Image繼承自Image實現其方法,主要的作用就是將圖片加載到內存對其進行操作
package responseproject;import java.io.IOException; import java.util.Random; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/checkcode") public class CheckCode extends HttpServlet{/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int imgwidth=100;int imgheight=50;//1.創建圖片對象,在內存中圖片(驗證碼圖片對象)BufferedImage image=new BufferedImage(imgwidth,imgheight,BufferedImage.TYPE_INT_RGB); //也可以指定讀取image=imageIO.read(new file())//2.美化圖片Graphics g=image.getGraphics(); //獲得畫筆對象//設置畫筆顏色g.setColor(Color.pink);//在創建的圖片對象大小中填充矩形,顏色為上面設置的顏色,第一,二個參數是起始點的x,y,第三,四個參數是有多寬,有多高g.fillRect(0, 0, imgwidth, imgheight);//重新設置畫筆顏色g.setColor(Color.blue);//在image上畫邊框,第一,二個參數是起始點的x,y,第三,四個參數是有多寬,有多高,注意:邊框占一個像素,所以需要寬和高-1才能覆蓋全部g.drawRect(0, 0, imgwidth-1, imgheight-1);//隨機設置驗證碼的值String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";Random random=new Random();//隨機在image中寫字符串,第三,四個參數是畫的位置for(int i=1;i<5;i++) {int index=random.nextInt(str.length()); //隨機選取字母字符g.setFont(new Font("宋體", Font.PLAIN, 20)); //設置畫筆大小g.drawString(str.charAt(index)+"",imgwidth/5*i ,25); }//隨機畫干擾線,第一,二個參數是起始點的x,y,第三,四個參數是最后一個點的x,yint x1=0,y1=0,x2=0,y2=0;for(int i=0;i<=8;i++) { //畫8次線條x1=random.nextInt(imgwidth);y1=random.nextInt(imgheight);x2=random.nextInt(imgwidth);y2=random.nextInt(imgheight);g.setColor(Color.gray);g.drawLine(x1, y1, x2, y2);}//3.圖片顯示在頁面上ImageIO.write(image, "jpg", resp.getOutputStream()); //將圖片寫入指定文件(第三個參數是指定的位置Fileoutpotstream(new File(""))}} 結果圖:?
總結
- 上一篇: labelme的 json格式转化成自己
- 下一篇: js 实现 点击图片刷新 验证码 看不清