本文實例為大家分享了java生成字母驗證碼的具體代碼,供大家參考,具體內容如下
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;public class VerifyCode { //圖片寬高 private int w=70; private int h=35; private Random r=new Random(); private String[] fontNames={"宋體","華文楷體","黑體","微軟雅黑","楷體_GB2312"}; private String codes="234567890qwertyuipasdfghjkzxcvbnmQWERTYUIPASDFGHJKZXCVBNM"; private Color bgColor=new Color(255,255,255); private String text; //生成隨機顏色 private Color randomColor(){ int red=r.nextInt(150); int green=r.nextInt(150); int blue=r.nextInt(150); return new Color(red, green, blue); } //生成隨機字體 private Font randomFont(){ int index=r.nextInt(fontNames.length); String fontName=fontNames[index]; int style=r.nextInt(4);//0 無 1 粗體 2 斜體 3 粗+斜 int size=r.nextInt(5)+24; //生成隨機字號 24~28 return new Font(fontName, style, size); } //干擾線 private void drowLine(BufferedImage image){ //生成4條干擾線 int num=4; Graphics2D bi=(Graphics2D) image.getGraphics(); for (int i = 0; i < num; i++) { int x1=r.nextInt(w); int x2=r.nextInt(w); int y1=r.nextInt(h); int y2=r.nextInt(h); bi.setStroke(new BasicStroke(1.5F)); bi.setColor(Color.BLUE);//干擾線色 bi.drawLine(x1,y1,x2,y2); } } //隨機生成一個字符 private char randomChar(){ int index=r.nextInt(codes.length()); return codes.charAt(index); } //圖片緩沖區 private BufferedImage createImage(){ BufferedImage image=new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR); Graphics2D bi=(Graphics2D) image.getGraphics(); bi.setColor(this.bgColor); bi.fillRect(0, 0, w, h); return image; } //生成圖片 public BufferedImage getImage(){ BufferedImage image=createImage(); Graphics2D bi=(Graphics2D) image.getGraphics(); StringBuilder sb=new StringBuilder(); for (int i = 0; i <4; i++) { String string=randomChar()+""; sb.append(string); //每個字符占圖片1/4寬 float x=i*1.0F*w/4; //隨機字體格式 bi.setFont(randomFont()); bi.setColor(randomColor()); //把字寫在圖片適當處(h-6指圖片距底部6個高度) bi.drawString(string, x, h-6); } this.text=sb.toString(); drowLine(image); return image; } //返回得到的字體 public String getText(){ return text; } //把圖片寫入指定位置 public static void output(BufferedImage image,OutputStream out){ try { ImageIO.write(image, "JPG", out); } catch (IOException e) { e.printStackTrace(); } }}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答