package os;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
public class Img07 {
public static void main(String[] args) {
checkNum();
}
private static void checkNum() {
Random rand = new Random();
int weight = 120;
int height = 35;
//建立透明画布
BufferedImage img = new BufferedImage(weight, height, 2);
//建立画笔
Graphics2D d = img.createGraphics();
//设置线条和文件的,抗锯齿(平滑)
d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
//为画布增加边框先线条
d.drawRect(0, 0, weight - 1, height - 1);
//向建立的画布中添加字符串
String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
int len = 4;
StringBuilder su = new StringBuilder();
for (int i = 0; i < len; i++) {
int x = i * 25 + 20;
int y = 25;
//设置字体及大小
Font font = new Font("宋体", Font.BOLD, 30);
d.setFont(font);
//随机文字和随机颜色
d.setColor(new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256), rand.nextInt(100) + 100));
String t = String.valueOf(s.charAt(rand.nextInt(s.length())));
//旋转
su.append(t);
d.drawString(t, x, y);
}
//在控制台打印输出索生成的验证码
System.out.println(su);
//添加干扰文字
for (int i = 0; i <50 ; i++) {
String j =String.valueOf(s.charAt(rand.nextInt(s.length())));
d.setColor(new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256),rand.nextInt(50)+50));
d.setFont(new Font("",Font.BOLD,10));
int x = rand.nextInt(160);
int y = rand.nextInt(35);
d.drawString(j,x,y);
}
//添加干扰图像
for (int i = 0; i <30 ; i++) {
d.setColor(new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256),rand.nextInt(50)+50));
int x = rand.nextInt(160);
int y = rand.nextInt(35);
d.fillOval(x,y, rand.nextInt(10)+10, rand.nextInt(10+10));
}
//输出图片
try {
ImageIO.write(img, "png", new File("moddo1/src/checkNum.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}