java 验证码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangchaoyi1a2b/article/details/51425430
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;


public class ImageCode {


private char[] code = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
// 宽
private int IMG_WIDTH = 100;
// 高
private int IMG_HEIGHT = 40;
// 随机个数
private int NUM = 4;
// 偏移量
private int x = 2;
private int y = 2;
private Random random = new Random();
// 干扰线条数
private int LINE_NUM = 6;
    
public void create(int flag) {


File file = new File("D:\\image\\code"+flag+".jpg");
BufferedImage bufferedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
// 设置画笔的颜色
g.setColor(Color.BLACK);
// 画个矩形
g.drawRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
// 写入随机数
String randomStr = getRandomStr();
// 字体
// Font font = new Font("Dialog,DialogInput,Monospaced,Serif,SansSerif",
// style, size);
Font font = new Font("SansSerif", Font.BOLD, 26);
g.setFont(font);
// 颜色随机
// g.setColor(Color.GREEN);
// g.setColor(getRandomColor());
// g.drawString(randomStr,7+random.nextInt(x), 28+random.nextInt(y));
// 字符颜色随机
drawString(g);


// 画出干扰线
drawDisturbLine(g);
//图像倾斜10
// g.rotate(30);

try {
ByteArrayOutputStream os=new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpg", file);
// ImageIO.write(bufferedImage, "jpg", os);
// SortedMap<String, Charset>  map=Charset.availableCharsets();
// System.out.println(map.keySet());
// Charset charset = Charset.forName("utf-8");
// ByteBuffer buffer = ByteBuffer.wrap(os.toByteArray(), 0, os.toByteArray().length);
// CharBuffer charBuffer = charset.decode(buffer);
// System.out.println(charBuffer.toString());
} catch (IOException e) {
e.printStackTrace();
}
g.dispose();
}


private void drawDisturbLine(Graphics2D g) {
for (int i = 0; i < LINE_NUM; i++) {
g.setColor(getRandomColor()); 
g.drawLine(random.nextInt(5) + x, random.nextInt(IMG_HEIGHT + 10) + y,
random.nextInt(IMG_WIDTH + 10) + IMG_WIDTH / 2, random.nextInt(IMG_HEIGHT));


}


}


private void drawString(Graphics2D g) {
int j = 0;
for (int i = 0; i < NUM; i++) {
j = (int) (Math.random() * 36);
g.setColor(getRandomColor());
// AffineTransform trans = new AffineTransform();
// trans.rotate(50.0*3.1415927/180.0,50,20);
// g.setTransform(trans);
//旋转30
// g.shear(5, 5);
// g.rotate(1);
//正弦曲线
// g.drawString(code[j] + " ", 19*i+8, (int) ((int)10*Math.sin(random.nextInt(90))+28));
g.drawString(code[j] + " ", 19*i+8, (int) ((int)10*Math.sin(random.nextInt(90))+28));

}
}


private String getRandomStr() {
StringBuffer temp= new StringBuffer();
int j=0;
for (int i = 0; i < NUM; i++) {
j = (int) (Math.random()*36);
temp.append(code[j]+" ");
}
return temp.toString();
}
private Color getRandomColor() {
return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
}


public static void main(String[] args) {
ImageCode code = new ImageCode();
code.create(5);
}


}

猜你喜欢

转载自blog.csdn.net/zhangchaoyi1a2b/article/details/51425430
今日推荐