public static void main(String[] args) throws Exception {
//编写验证案例效果
String letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
//建立图像,定义尺寸,格式
int w = 160; //图像的宽
int h = 60; //图像的高
int len = 4;
BufferedImage bd = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
//建立画笔
Graphics2D g = bd.createGraphics();
//设置线条平滑
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(new Color(251, 251, 251, 200));
g.fillRect(0, 0, w, h);
Font font = new Font("宋体", Font.BOLD, 35);
g.setFont(font);
StringBuilder su = new StringBuilder(len);
//画字
for (int i = 0; i < len; i++) {
Color c = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(100) + 100);
g.setColor(c);
int x = i*35+5;
int y = random.nextInt(25)+28;
font = font.deriveFont(random.nextInt(553),random.nextInt(18)+30); //设置验证码的字体
g.setFont(font);
String t = String.valueOf(letter.charAt(random.nextInt(letter.length())));
su.append(t);
double radianPercent = Math.PI*(random.nextInt(35)/180D);
if (random.nextBoolean())
radianPercent = -radianPercent;
g.rotate(radianPercent,x,y);
g.drawString(t,x,y);
g.rotate(-radianPercent,x,y);
}
System.out.println(su);
//04增加干扰文字
for(int i=0;i<15;i++){
Color c = new
Color(random.nextInt(256),random.nextInt(256),random.nextInt(256),random.nextInt(120
)+120);
g.setColor(c);
int x = random.nextInt(w);
int y = random.nextInt(h);
font = font.deriveFont(random.nextInt(3),random.nextInt(8)+10);
g.setFont(font);
String t =
String.valueOf(letter.charAt(random.nextInt(letter.length())));
g.drawString(t,x,y);
}
//干扰图形
for (int i=0;i<10;i++){
Color c = new
Color(random.nextInt(256),random.nextInt(256),random.nextInt(256),random.nextInt(20)
+20);
g.setColor(c);
int x = random.nextInt(w);
int y = random.nextInt(h);
int ss = random.nextInt(30)+10;
g.fillOval(x,y,ss,ss);
}
g.dispose(); //关闭画笔
ImageIO.write(bd, "png", new File("image.png"));
}
ImageIO生成验证码
最新推荐文章于 2025-02-24 00:15:00 发布