1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package com.demo.utils;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.QuadCurve2D;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* 生成验证码
* @author dongyangyang
* @Date 2017/3/13 12:31
* @Version 1.0
*
*/
public class AuthCodeUtils {
private final static Random random = new Random();
// 随机字体样式
private final static int [] fontStyle = { Font.HANGING_BASELINE, Font.ITALIC, Font.LAYOUT_LEFT_TO_RIGHT, Font.LAYOUT_NO_LIMIT_CONTEXT, Font.LAYOUT_NO_START_CONTEXT,
Font.LAYOUT_RIGHT_TO_LEFT, Font.CENTER_BASELINE, Font.PLAIN, Font.ROMAN_BASELINE, Font.TRUETYPE_FONT, Font.TYPE1_FONT, Font.BOLD };
private final static String[] font = { "Ravie" , "Forte" , "Arial" , "Courier" };
private final static int [] xarr = { 23 , 24 , 19 , 20 , 21 };
private final static int [] yarr = { 20 , 21 , 22 , 23 , 24 , 25 , 16 , 17 , 18 };
private final static int [] font_size = { 28 , 29 , 30 , 21 , 22 , 23 , 24 , 27 , 26 , 25 };
/**
* 画随机码图
* @param out
* @param width
* @param height
* @throws IOException
*/
public static void draw(OutputStream out, String value) throws IOException {
int width = 100 , height = 40 ;
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) bi.getGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(randColor( 240 , 255 ));
g.fillRect( 0 , 0 , width, height);
g.drawRect( 1 , 1 , width - 2 , height - 2 );
for ( int i = 0 ; i < 10 ; i++) {
g.setColor(randColor( 150 , 250 ));
g.drawOval(random.nextInt( 110 ), random.nextInt( 24 ), 5 + random.nextInt( 10 ), 5 + random.nextInt( 10 ));
}
g.setFont(getFont());
g.setColor(randColor(xarr[( int ) (Math.random() * 5 )], 254 ));
for ( int i = 0 , len = value.length(); i < len; i++) {
String rand = String.valueOf(value.charAt(i));
int degree = random.nextInt( 23 );
if (i % 2 == 0 ) {
degree = degree * (- 1 );
}
int x = xarr[( int ) (Math.random() * 5 )] * i, y = yarr[( int ) (Math.random() * 8 )];
g.rotate(Math.toRadians(degree), x, y);
g.setColor(randColor( 48 , 254 ));
g.drawString(rand, x + 8 , y + 10 );
g.rotate(-Math.toRadians(degree), x, y);
}
// 图片中间线
g.setColor(randColor( 0 , 200 ));
// width是线宽,float型
BasicStroke bs = new BasicStroke( 2 );
g.setStroke(bs);
// 画出曲线
QuadCurve2D.Double curve = new QuadCurve2D.Double(0d, random.nextInt(height - 8 ) + 4 , width / 2 , height / 2 , width, random.nextInt(height - 8 ) + 4 );
g.draw(curve);
// 销毁图像
g.dispose();
ImageIO.write(bi, "png" , out);
}
private static Font getFont() {
return new Font(font[( int ) (Math.random() * 4 )], fontStyle[( int ) (Math.random() * 12 )], font_size[( int ) (Math.random() * 10 )]);
}
private static Color randColor( int fc, int bc) { // 给定范围获得随机颜色
if (fc > 255 ) {
fc = 255 ;
}
if (bc > 255 ) {
bc = 255 ;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
private static char [] c = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'j' , 'k' , 'm' , 'n' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,
'G' , 'H' , 'J' , 'K' , 'L' , 'M' , 'N' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '1' , '3' , '5' , '6' , '7' , '8' , '9' };
public static String getRandom( int size) {
StringBuilder sb = new StringBuilder();
for ( int i = 0 ; i < size; i++) {
sb.append(c[Math.abs(random.nextInt()) % c.length]);
}
return sb.toString();
}
public static void main(String[] args) throws IOException {
for ( int i = 1 ; i < 10 ; i++) {
FileOutputStream out = new FileOutputStream( "D:\\bb" + i + ".png" );
draw(out, getRandom( 4 ));
}
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_35712358/article/details/70254597