[代碼] [Java]代碼 /** * */ package org.mspring.platform.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOE http://www.szhaoexport.com/linked/20130311.do xception; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; /** * @author Gao Youbo * @since Feb 20, 2012 */ public class ImageUtils { /** * 生成隨機驗證碼 * * @param outputStream * 輸出流 * @param allowValidateString * 答應驗證碼中呈現的字符串 * @return */ public static String validateCode(OutputStream outputStream, String allowValidateString) { int width = 60; int height = 20; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 緩衝區Image Graphics2D g = buffImg.createGraphics(); // 取得在緩衝區Image中擔任繪畫的目標(畫筆)他是Graphics的字類型 // 創立一個隨機數生成器類。 Random random = new Random(); g.setColor(Color.decode("#ffffff")); g.fillRect(0, 0, width, height); // 畫一個填充的矩形佈景色彩爲白色 // 創立字體,字體的鉅細大概依據圖畫的高度來定。 Font font = new Font("Times New Roman", Font.PLAIN, 18); // 設置字體。 g.setFont(font); // 畫邊框。 // g.setColor(Color.blue); // g.drawRect(0, 0, width - 1, height - 1); // 隨機發生160條攪擾線,使圖象中的認證碼不易被其它程序探測到。 g.setColor(Color.GRAY); for (int i = 0; i < 80; i ) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x xl, y yl); } // randomCode用於保管隨機發生的驗證碼,以便用戶登陸後進行驗證。 StringBuffer randomCode = new StringBuffer(); int red = 0, green = 0, blue = 0; // 隨機發生驗證碼。 for (int i = 0; i < 4; i ) { // 獲得隨機發生的驗證碼數字。 int randomIndex = random.nextInt(allowValidateString.length()); if (randomIndex == 0) randomIndex = 1; String strRand = allowValidateString.substring(randomIndex - 1, randomIndex); // 發生隨機的色彩重量來結構色彩值,這樣輸出的每位數字的色彩值都將不同。 red = random.nextInt(110); green = random.nextInt(50); blue = random.nextInt(50); // 用隨機發生的色彩將驗證碼製做到圖畫中。 g.setColor(new Color(red, green, blue)); g.drawString(strRand, 13 * i 6, 16); // 將發生的四個隨機數組合在一塊兒。 randomCode.append(strRand); } try { ImageIO.write(buffImg, "jpeg", outputStream); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return randomCode.toString(); } } http://www.fpfuzhou.com/linked/20130311.do