使用Java 如何實現隨機生成驗證碼圖片?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1.情景展示
登錄時,生成隨機驗證碼圖片,如何實現?
2.原因分析
后臺生成驗證碼并生成圖片返回至前臺
3.解決方案
導包
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.RandomStringUtils; import base.web.tools.WebUtils;
獲取驗證碼請求處理
/** * 獲取驗證碼 * @explain * @return 隨機數圖片 */ public String getImage() { try { int width = 55; int height = 25; // 取得一個4位隨機數字字符串 String s = RandomStringUtils.randomNumeric(4); HttpServletResponse response = WebUtils.getResponse(); // 存入cookie,用于與用戶的輸入進行比較 Cookie cookie = new Cookie("validateCode", s); response.addCookie(cookie); response.setContentType("images/jpeg"); response.setHeader("Cache-Control", "no-cache"); ServletOutputStream out = response.getOutputStream(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 設定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 設置字體 Font mFont = new Font("宋體", Font.BOLD, 18); g.setFont(mFont); // 畫邊框 // g.setColor(Color.BLACK); // g.drawRect(0, 0, width - 1, height - 1); // 生成隨機類 Random random = new Random(); // 將認證碼顯示到圖象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); // 將驗證碼畫進圖片 g.drawString(s, 5, 20); // 圖象生效 g.dispose(); // 輸出圖象到頁面 ImageIO.write((BufferedImage) image, "JPEG", out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 給定范圍獲得隨機顏色 * @explain * @param fc * @param bc * @return */ private Color getRandColor(int fc, int bc) { Random random = new Random(); fc = (fc > 255) ? 255 : fc; bc = (bc > 255) ? 255 : bc; // 獲取3次 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); }
html片段
<img src="<c:url value="/getImage.do"/>" id="randomImage" height="35px" width="100px" onclick='sjs()' />
js片段
function sjs () { // 獲取圖片請求后面加一個隨機參數,是為了避免同一個請求瀏覽器拒絕向服務器發送請求的問題(緩存) $("#randomImage")[0].src = baseUrl + "/getImage.do?s=" + Math.random(); };
看完上述內容,你們掌握使用Java 如何實現隨機生成驗證碼圖片的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。