package self;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class imgMade {
public static void main(String[] args) {
try {
getVcode();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String getVcode() throws IOException{
String vCode = "";//把生成的验证码存一下,用来与输入的结果验证
//BufferedImage 访问图像缓冲区的类,可以在缓冲区中生成一个图片文件
//BufferedImage的构造方法之一,三个参数分别代表横坐标延伸长度,纵坐标延伸长度,最后一个为生成图片颜色的格式
BufferedImage img = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);
//构造一个画笔对象,可用于在图片上进行绘画操作
Graphics g = img.createGraphics();
g.setColor(Color.blue);//设置画笔颜色的方法
//执行画笔的绘画过程
g.fillRect(0, 0,300,200);//设置画笔的图画过程,4个参数为:起始横坐标,起始纵坐标,横向绘画宽度,纵向绘画宽度
//以上几步执行完成后,基础图片绘制完成
g.setColor(Color.yellow);//再次设置画笔,准备在图片上写字
//设置字体,准备好输出字符的样式大小等,参数是一个生成的字体
g.setFont(new Font("仿宋",Font.PLAIN, 45));//Font类的构造参数:字体格式(宋体,微软雅黑等),字体样式(加粗斜体等)Font.PLAIN为默认,字的大小
//g.drawString("1234", 150, 100);//画笔在图片中书写文字的方法,参数:书写内容,文字的起始横坐标,文字的起始纵坐标
/**
* 此处可以根据写字的横纵坐标,加入参数i,使写出的字在横纵坐标上变化位置
* 也可以加入随机数等,调整位置达到乱序的效果
* 书写文字或者填充底色的时候也可以使用随机数达到生成随机颜色的效果
* 字体字样等等等等,反正看需要都可以随机!
* 若要设置中文验证码,有一种方法,是声明一个数组,里头写一堆准备好的中文汉字加进去,然后用随机数从这批中文中抽取,写进验证码图片
* 英文也可以,或者直接阿斯克码都可
*/
Random rnum = new Random(System.currentTimeMillis());
for(int i=0;i<4;i++){ //随机弄点颜色,画干扰线
}
for(int k=0;k<4;k++){
int i = rnum.nextInt(10);
int j=0;
if(i%2!=0){
j=20;//纵坐标,让字上下浮动,20就是个浮动参数
}
vCode+=i;//生成一个就给加进生成结果中,进行比对
g.setColor(Color.yellow);//再次设置画笔,准备在图片上写字
g.drawString(i+"",50+45*k, 80+k*j);
//弄点随机颜色
g.setColor(new Color(rnum.nextInt(256), rnum.nextInt(256), rnum.nextInt(256)));
//画几条干扰线,
g.drawLine(50+45*k,80+k*j, rnum.nextInt(100), rnum.nextInt(50));
j=0;//
}
//ImageIO的write方法,作用是向输出流中输出一个图片
//参数:上面声明的图片缓冲区,图片格式,图片输出位置
ImageIO.write(img,"jpg",new File("e:/test.jpg"));
System.out.println("Done");
return vCode;
}
}
验证码图片生成
最新推荐文章于 2024-06-28 11:28:08 发布