1. 程式人生 > >Java SWT Lable框中顯示圖片驗證碼

Java SWT Lable框中顯示圖片驗證碼

在使用Java GUI在做一些登入介面的時候我們可能需要一些驗證碼,下面的這個方法適用於Java SWT,用於在Lable框中顯示圖片驗證碼。


public static String testcode="";//驗證碼,儲存驗證碼,取這個值於使用者輸入的值作比較

public static void image(Label label) throws IOException{
	   //BufferedImage 的建構函式可以設定圖片的大小
	   BufferedImage image = new BufferedImage(label.getSize().x, label.getSize().y,BufferedImage.TYPE_INT_RGB);//這裡設定圖片的大小
	   //這裡需要使用到java.awt.Graphics來繪製圖片
	   java.awt.Graphics graphics = image.getGraphics();
	   Color color = new Color(245, 245, 220);
	   graphics.setColor(color);//為圖片新增的底色
	   graphics.fillRect(0,0,label.getSize().x,label.getSize().y);
	   char[] content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
	   Random random = new Random();
	   int index;
	   for(int i=0;i<4;i++){//驗證碼長度
				index = random.nextInt(content.length);
				testcode+=String.valueOf(content[index]);//testcode是驗證碼
				//圖片中文字的顏色
				graphics.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
				//圖片中文字的位置
				graphics.drawString(content[index]+"",10+20*i,10+3*random.nextInt(4));
				//1,驗證碼文字,2文字距離上邊的距離3,距離下部分的距離,可以更改這後面的兩個資料,來改變圖片的,驗證碼顯示位置
	   }
	  ByteArrayOutputStream stream=new ByteArrayOutputStream();
	  ImageIO.write(image, "jpg", stream);
	  InputStream inputStream=new ByteArrayInputStream(stream.toByteArray());
	  label.setImage(new Image(null, new ImageData(inputStream).scaledTo(label.getSize().x, label.getSize().y)));
 }