// //验证码图片中可以出现的字符集,可根据需要修改
// private char mapTable[]={
// 'a','b','c','d','e','h',
// 'A','B','C','D','E','F',
// 'j','k','m','n','p','q',
// 'J','K','M','N','P','Q',
// 'r','s','t','u','v','w',
// 'R','S','T','U','V','W',
// 'x','y','z','X','Y','Z',
// '2','3','4','5','6','7',
// '8','9'
// };
//
// public String getCertPic(int width, int height,OutputStream os) {
// if(width<=0) {
// width=60;
// }
// if(height<=0) {
// height=20;
// }
//
// BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
// //获取图形上下文
// Graphics g = image.getGraphics();
// //设定背景颜色
// g.setColor(new Color(0xDCDCDC));
// g.fillRect(0, 0, width, height);
// //画边框
// g.setColor(Color.black);
// g.drawRect(0, 0, width-1, height-1);
// //随机产生的验证码
// String strEnsure="";
// //4代表4位验证码,如果要生成等多位的验证码 ,则加大数值
//
// for(int i=0; i<4; i++) {
// strEnsure += mapTable[(int)(mapTable.length*Math.random())];
// }
// //将验证码显示在图像中,如果要生成更多位的验证码,增加drawString语句
// g.setColor(Color.black);
// g.setFont(new Font("Atlantic Inline", Font.PLAIN,18));
// String str = strEnsure.substring(0, 1);
// g.drawString(str, 8, 17);
// str = strEnsure.substring(1, 2);
// g.drawString(str, 20, 15);
// str = strEnsure.substring(2, 3);
// g.drawString(str, 35, 18);
// str = strEnsure.substring(3, 4);
// g.drawString(str, 45, 15);
// //随机产生10个干扰点
//
// Random random = new Random();
// for(int i=0; i<10; i++ ) {
// int x = random.nextInt(width);
// int y = random.nextInt(height);
// g.drawOval(x, y, 1, 1);
// }
// //释放图形上下文
// g.dispose();
Color getRandColor(int fc, int bc){//给定范围获得随机颜色
Random random = new Random();
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);
}
public String getCertPic(OutputStream os) {
// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(this.getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 图象生效
g.dispose();
try{
//输出图像到页面
ImageIO.write(image, "JPEG", os);
}catch(IOException e) {
return "";
}
return sRand;
}
/**
*
public String getCertPic() {
Color getRandColor(int fc, int bc){//给定范围获得随机颜色
Random random = new Random();
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);
}
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
*/
分享到:
相关推荐
JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码
这是本人所写封装好了的Java图片验证码工具类,包含了四位图片验证码,和图片验证码文本获取方法,内含api技术文档
java图片验证码:有servelt的写法,web.xml的配置以及jsp(或者html)的写法。亲测能用
好看的图片验证码,包含干扰线、噪点、扭曲图片等。。
java解析图片验证码
java图片验证码 选择 VerificationImage 基本上修改过后能够满足大部分的需求,其中注释也比较详尽,方便阅读和修改
java验证码识别示例
包含5个识别图片验证码的类,分别对应不同5种不同的验证码 其中用了两种不同的实现方式(截取采样像素比对+Tesseract-OCR识别) 附带一个图像指纹类(判定图片相似度)和一个寻找联通线的类(八皇后算法实现)
java图片验证码生成。有干扰线。随机字符。
java
csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四种验证码生成集合。将生成的四个验证图片放在一个页面上以供比对,全部可以运行。 四种方法分别为: 1. 数字、字母、汉字混合验证码,叠影(给力)、扭曲 ...
java 生成随机图片验证码 ,字母数组随机组合,加干扰线
此压缩包里含有图片验证码的工具类和具体调用该验证码的controller
java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...
JAVA实现随机图片验证码简单方法.rtf
主要介绍了java实现图片验证码示例,需要的朋友可以参考下
登录、注册是常用的图片验证码,附件包含如何在java web 项目中引用几个文件,照搬即用。