用java寫圖片


登錄注冊的時候都會有圖片驗證,這是為了防止暴力破解和惡意注冊。寫一個思路來實現驗證圖片的實現,只是一個思路,隨機生成文字並沒有寫。

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Image {
public static void main(String[] args) throws FileNotFoundException, IOException{
    //得到圖片緩沖區
    BufferedImage bi=new BufferedImage(150,70, BufferedImage.TYPE_INT_RGB);
    //得到畫筆
    Graphics2D g2=(Graphics2D) bi.getGraphics();
    //填充背景
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, 150, 70);
    //設置邊框
    g2.setColor(Color.RED);
    g2.drawRect(0, 0, 149, 69);
    //向圖片上寫字符串
  g2.setFont(new Font("宋體", Font.BOLD, 10));
g2.setColor(Color.BLACK); g2.drawString("grup", 19, 20); ImageIO.write(bi, "JPEG", new FileOutputStream("f:/g.jpg")); } }

可以做的文章有,第一是隨機生成字符,第二隨機生成顏色,第三隨機生成干擾線,第四隨機生成字體,第五隨機生成字號等等

網頁登錄的時候需要圖片驗證,今天剛好用到,把之前沒有做的東西補充上來。

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="23456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 //背景顏色
  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);
       int size=r.nextInt(5)+24;
       return new Font(fontName, style, size);
   }
   //生成隨機字符
   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_RGB);
       Graphics2D g2=(Graphics2D)image.getGraphics();
       g2.setColor(this.bgColor);
       g2.fillRect(0, 0, w, h);
       return image;
   }
   //生成隨機亂線
   private void drawLine(BufferedImage image){
       
       int num=3;
       Graphics2D g2=(Graphics2D)image.getGraphics();
       for(int i=0;i<3;i++){
           int x1=r.nextInt(w);
           int y1=r.nextInt(h);
           int x2=r.nextInt(w);
           int y2=r.nextInt(h);
           g2.setStroke(new BasicStroke(1.5F));
           g2.setColor(Color.BLUE);
           g2.drawLine(x1,y1,x2,y2);
       }
    
   }
   //將圖片輸出到某個輸出流中
   public static void output(BufferedImage image,OutputStream out) throws IOException{
       ImageIO.write(image, "JPEG",out);
   }
   //得到圖片上的文字
   public String getText(){
       return text;
   }
   //得到圖片
   public BufferedImage getImage(){
       BufferedImage image=createImage();
       Graphics2D g2=(Graphics2D)image.getGraphics();
       StringBuilder sb=new StringBuilder();
       for(int i=0;i<4;i++){
           String s=randomChar()+"";
           sb.append(s);
           float x=i*1.0F*w/4;
           g2.setFont(randomFont());
           g2.setColor(randomColor());
           g2.drawString(s, x, h-5);
       }
       this.text=sb.toString();
       drawLine(image);
       return image;
   }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM