用java如何做图片验证码,运用java生成图片验证码
使用java生成图片验证码
本程序来源以下网址:http://www.linux521.com/2009/java/200909/8475.html
仅供学习和参考
import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Font;
import java.awt.Graphics; import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
/**
*
* @author zyong
*验证码
*/
public class CheckCode {
/**
*创建一个随机数对象
*/
Random random = new Random();
/**
*生成的字符集
*/
private final String character = "0ABC1DEF2GHI3JKL4MNO5PQR6ST7UV8WX9YZ";
/**
*返回生成后的图片字符
*/
private String checkCode;
/**
* 设置生成图片的宽度,默认为65
*/
private int width = 65;
/**
* 设置生成图片的高度,默认为25
*/
private int height = 25;
/**
* 设置图片的类型,默认为BufferedImage.TYPE_INT_RGB
*/
private int imageType = BufferedImage.TYPE_INT_RGB;
/**
*
* @return生成图片后的字符
*/
public String getCheckCode() {
return checkCode;
}
/**
*
* @return图片的高度
*/
public int getHeight() {
return height;
}
/**
*
* @param height图片的高度
*/
public void setHeight(int height) {
this.height = height;
}
/**
*
* @return图片的宽度
*/
public int getWidth() {
return width;
}
/**
*
* @param width图片的宽度
*/
public void setWidth(int width) {
this.width = width;
}
/**
*
* @return图片类型
*/
public int getImageType() {
return imageType;
}
/**
*
* @param imageType图片类型
*/
public void setImageType(int imageType) {
this.imageType = imageType;
}
public ByteArrayInputStream buildImage() {
BufferedImage image = new BufferedImage(this.width, this.height, this.imageType);
Graphics g = image.getGraphics();
Graphics2D g2d = (Graphics2D) g;
g.setColor(this.getColor(200, 250));
g.fillRect(0, 0, this.width, this.height);
g.setFont(new Font("Times New Roman", Font.BOLD, 17));
g.setColor(this.getColor(180, 200));
/*
*绘制100条干扰线
*/
for (int i = 0; i < 100; i ) {
int x1 = random.nextInt(this.width);
int y1 = random.nextInt(this.height);
int x2 = random.nextInt(this.width - 3);
int y2 = random.nextInt(this.height - 3);
BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);
Line2D line = new Line2D.Double(x1, y1, x2, y2);
g2d.setStroke(bs);
g2d.draw(line);
g.setColor(getColor(180, 222));
}
StringBuffer codeStr = new StringBuffer();
for (int i = 0; i < 4; i ) {
char c = character.charAt(random.nextInt(36));
codeStr.append(c);
Color color = new Color(20 random.nextInt(110), 20 random.nextInt(110), 20 random.nextInt(110));
g.setColor(color); /*随机文字,旋转文字到指定角度*/
AffineTransform trans = new AffineTransform();
trans.rotate(random.nextInt(10) * i 3, 5);
float scaleSize = random.nextFloat() 0.5f;
if (scaleSize < 0.8 || scaleSize > 1.1f) {
scaleSize = 1f;
}
trans.scale(scaleSize, scaleSize); g2d.setTransform(trans);
g.drawString(String.valueOf(c), 15 * i 6, 9);
}
this.checkCode = codeStr.toString(); g.dispose();
ByteArrayInputStream inputStream = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
ImageOutputStream imgOutput = ImageIO.createImageOutputStream(outputStream);
ImageIO.write(image, "JPEG", imgOutput);
imgOutput.close();
inputStream = new ByteArrayInputStream(outputStream.toByteArray());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
/**
* 利用随机数,随机生成一个Color颜色的对象
* @param fc
* @param bc
* @return颜色对象
*/
private Color getColor(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);
}
}
用java如何做图片验证码,运用java生成图片验证码相关推荐
- 学习java可以做什么?学习java有什么用?
学习java可以做什么?学习java有什么用?Java不仅是时下最火的编程语言,还是一门很年轻的语言.Java已成为当今市面上最受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在, ...
- java tess4j mave_图片处理,Tess4j读取验证码、识别文字
最近有个需求,读取一个网站的信息,需要读取验证码. 一.环境依赖 1.如果在Linux下运行,需要安装如下 tesseract-ocr, 在 centos 上 yum install tesserac ...
- 后端生成图片验证码,Kotlin生成图片验证码,Java生成图片验证码,图片验证码的生成和校验
后端生成图片验证码 注:以下代码主要使用kotlin进行编写,kotlin可兼容java,可以直接使用.IDEA也支持将java与kotlin代码进行互相转换. 1.引入依赖: Gradle(若你使用 ...
- 学java怎么做兼职?学Java什么程度才能找兼职?
生活中很多的程序都是用Java编写而成的,正因如此才有这么多学习Java的同学,有些同学表示我感觉自己学的差不多了,想要找一些兼职一方面锻炼自己,一方面还能赚点外快,那么学Java的到底应该怎么做兼职 ...
- php生成图片验证码代码,PHP生成图片验证码以及点击切换的代码
这篇文章主要介绍了PHP生成图片验证码实例,同时介绍了点击切换(看不清?换一张)效果实现方法,需要的朋友可以参考下 这里来看下效果: 现在让我们来看下 PHP 代码<?php session_s ...
- java thumbnailator 做图片处理
maven 依赖 <!-- 图片处理 --><!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator --& ...
- java怎么做简易的游戏,Java小项目之《简易桌面小游戏》
注意小球的运动范围,规定向右为正,如果不限定范围小球可能会跑出银河系-所以限定小球碰到左面左右回弹 画完窗口后运行若还是一片空白可以先最大化然后最小化解决 代码目录 实现代码 import java. ...
- java 1.7图片压缩_appium+java(七)图片的放到及缩小操作
appium+java(七)图片的放到及缩小操作 多点触控(MultiTouch) MultiTouch对象是触摸操作的集合. 多点触控手势只有两个方法,add和perform. add 用于将不同的 ...
- 图片浏览器java程序_图片浏览器用java实现
该程序实现了图片的缩放以及浏览 package graphics; /** * 图片的缩放功能实现: *为什么图片不能无限放大,因为Thread的run方法不断在调整. *必须选择jpg或png的图片 ...
最新文章
- Graph + AI 2021中国峰会:TigerGraph与行业共探图与AI应用前景
- SAP SD VL02N对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs for Business Area –
- 大数据分析工资单:六大行员工再涨薪 人均年薪超26万
- ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能
- jq 地区(省市县区)联动菜单
- python语言中list和tuple有什么区别_python之list与tuple的区别
- Java基本数据类型和String类型的转化
- 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)
- javascript的拖放(第1部分)
- 两个文本框异动任何一个能即时更新计算结果
- dz3.4后台admin.php修改,Discuz X3.4论坛管理员无法登录后台,修改管理员账号密码的各种解决方法总结...
- 超好用的富文本编辑器froalaEditor(方便传图片和视频等)
- DELL linux 网卡驱动升级
- Chrome浏览器安装Axure插件教程
- 注意力机制attention图解
- 怎么快速查找重复文件以及删除重复文件
- 自定义阿里云OSS图片大小
- 三种嵌入式操作系统的深入分析与比较
- favicon.ico无法访问
- 如何下载天桥街道卫星地图高清版大图
热门文章
- MFC 打印调试 信息 OutputDebugString
- 可伸缩性和重/轻量,谁是实用系统的架构主选?
- 中科院特别提醒:发布成果时勿随意使用“国内首创”“国际领先”等词语!
- 郑州清华计算机学校,郑州11中喜获清华大学“2020年生源中学”
- 哈利波特5 哈利波特与凤凰社
- Emacs之为c/c++函数生成调用图(八十)
- Jmeter 局域网的IP欺骗终极解决方案
- linux ppt演讲_适用于Linux用户的5种Microsoft Powerpoint替代方案
- Matlab回归分析
- quartz怎么玩?(基本使用和入门)