java---驗證碼圖片的生成
阿新 • • 發佈:2019-02-18
package cn.hncu.img; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import org.junit.Test; public class imgDemo { @Test // 學習如何吧一個字串寫到一個檔案 public void ImgDemo1() throws FileNotFoundException, IOException { BufferedImage img = new BufferedImage(60, 30, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics();// 獲得畫板 g.drawString("Hello", 0, 10); g.dispose();// 功能相當於flush(); ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg")); } // 把上面的字串改成平常用的驗證碼--生成幾個隨機數字,有背景色,有干擾線 @Test public void ImgDemo2() throws FileNotFoundException, IOException { int width = 70; int height = 40; BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics();// 獲得畫板 // 設定背景色 g.setColor(Color.white); g.fillRect(0, 0, width, height);// 畫背景 // 設定字型 g.setFont(new Font("黑體", Font.BOLD, 18)); // 設定隨機數字 Random r = new Random(); for (int i = 0; i < 4; i++) { int a = r.nextInt(10);// 10個隨機數字 int y = r.nextInt(20) + 10; // 10~30範圍內的一個整數,作為y座標 Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g.setColor(c); g.drawString("" + a, 5 + i * 15, y); } // 干擾線 for (int i = 0; i < 10; i++) {// 設定10條幹擾線 Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g.setColor(c); g.drawOval(0, 0, width, height); g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height)); } g.dispose();// 功能相當於flush(); ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg")); } @Test // 可以旋轉和放縮的驗證碼 public void ImgDemo3() throws FileNotFoundException, IOException { int width = 80; int height = 40; BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); Graphics2D g2d = (Graphics2D) g; g2d.setFont(new Font("黑體", Font.BOLD, 20)); Random r = new Random(); for (int i = 0; i < 4; i++) { String str = "" + r.nextInt(10); AffineTransform aff = new AffineTransform();//旋轉函式(AffineTransform) aff.rotate(Math.random(), i * 20, height - 5);//旋轉角度 aff.scale(0.6 + Math.random(), 0.6 + Math.random()); g2d.setTransform(aff); g2d.drawString(str, 5 + i * 15, height - 5); } g2d.dispose();// 類似於流中的close()帶動flush()---把資料刷到img物件當中 ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg")); } }