public class ImageVerifyCode {
private int w
= 70;
private int h
= 35;
private Random r
= new Random();
private String
[] fontNames
= {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
private String codes
= "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
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 void drawLine(BufferedImage image
) {
int num
= 3;
Graphics2D g2
= (Graphics2D
) image
.getGraphics();
for (int i
= 0; i
< num
; 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
);
}
}
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(bgColor
);
g2
.fillRect(0, 0, w
, h
);
return image
;
}
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);
}
text
= sb
.toString();
drawLine(image
);
return image
;
}
public String getText() {
return text
;
}
public InputStream bufferedImageToInputStream(BufferedImage image
) {
ByteArrayOutputStream os
= new ByteArrayOutputStream();
try {
ImageIO
.write(image
, "png", os
);
InputStream input
= new ByteArrayInputStream(os
.toByteArray());
return input
;
} catch (IOException e
) {
e
.printStackTrace();
}
return null;
}
}
public Void getVerifyCode() {
ImageVerifyCode verifyCode
= new ImageVerifyCode();
BufferedImage image
= verifyCode
.getImage();
String code
= verifyCode
.getText();
}
转载请注明原文地址: https://lol.8miu.com/read-3115.html