使用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生成图片验证码相关推荐

  1. 学习java可以做什么?学习java有什么用?

    学习java可以做什么?学习java有什么用?Java不仅是时下最火的编程语言,还是一门很年轻的语言.Java已成为当今市面上最受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在, ...

  2. java tess4j mave_图片处理,Tess4j读取验证码、识别文字

    最近有个需求,读取一个网站的信息,需要读取验证码. 一.环境依赖 1.如果在Linux下运行,需要安装如下 tesseract-ocr, 在 centos 上 yum install tesserac ...

  3. 后端生成图片验证码,Kotlin生成图片验证码,Java生成图片验证码,图片验证码的生成和校验

    后端生成图片验证码 注:以下代码主要使用kotlin进行编写,kotlin可兼容java,可以直接使用.IDEA也支持将java与kotlin代码进行互相转换. 1.引入依赖: Gradle(若你使用 ...

  4. 学java怎么做兼职?学Java什么程度才能找兼职?

    生活中很多的程序都是用Java编写而成的,正因如此才有这么多学习Java的同学,有些同学表示我感觉自己学的差不多了,想要找一些兼职一方面锻炼自己,一方面还能赚点外快,那么学Java的到底应该怎么做兼职 ...

  5. php生成图片验证码代码,PHP生成图片验证码以及点击切换的代码

    这篇文章主要介绍了PHP生成图片验证码实例,同时介绍了点击切换(看不清?换一张)效果实现方法,需要的朋友可以参考下 这里来看下效果: 现在让我们来看下 PHP 代码<?php session_s ...

  6. java thumbnailator 做图片处理

    maven 依赖 <!-- 图片处理 --><!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator --& ...

  7. java怎么做简易的游戏,Java小项目之《简易桌面小游戏》

    注意小球的运动范围,规定向右为正,如果不限定范围小球可能会跑出银河系-所以限定小球碰到左面左右回弹 画完窗口后运行若还是一片空白可以先最大化然后最小化解决 代码目录 实现代码 import java. ...

  8. java 1.7图片压缩_appium+java(七)图片的放到及缩小操作

    appium+java(七)图片的放到及缩小操作 多点触控(MultiTouch) MultiTouch对象是触摸操作的集合. 多点触控手势只有两个方法,add和perform. add 用于将不同的 ...

  9. 图片浏览器java程序_图片浏览器用java实现

    该程序实现了图片的缩放以及浏览 package graphics; /** * 图片的缩放功能实现: *为什么图片不能无限放大,因为Thread的run方法不断在调整. *必须选择jpg或png的图片 ...

最新文章

  1. Graph + AI 2021中国峰会:TigerGraph与行业共探图与AI应用前景
  2. SAP SD VL02N对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs for Business Area –
  3. 大数据分析工资单:六大行员工再涨薪 人均年薪超26万
  4. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能
  5. jq 地区(省市县区)联动菜单
  6. python语言中list和tuple有什么区别_python之list与tuple的区别
  7. Java基本数据类型和String类型的转化
  8. 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)
  9. javascript的拖放(第1部分)
  10. 两个文本框异动任何一个能即时更新计算结果
  11. dz3.4后台admin.php修改,Discuz X3.4论坛管理员无法登录后台,修改管理员账号密码的各种解决方法总结...
  12. 超好用的富文本编辑器froalaEditor(方便传图片和视频等)
  13. DELL linux 网卡驱动升级
  14. Chrome浏览器安装Axure插件教程
  15. 注意力机制attention图解
  16. 怎么快速查找重复文件以及删除重复文件
  17. 自定义阿里云OSS图片大小
  18. 三种嵌入式操作系统的深入分析与比较
  19. favicon.ico无法访问
  20. 如何下载天桥街道卫星地图高清版大图

热门文章

  1. MFC 打印调试 信息 OutputDebugString
  2. 可伸缩性和重/轻量,谁是实用系统的架构主选?
  3. 中科院特别提醒:发布成果时勿随意使用“国内首创”“国际领先”等词语!
  4. 郑州清华计算机学校,郑州11中喜获清华大学“2020年生源中学”
  5. 哈利波特5 哈利波特与凤凰社
  6. Emacs之为c/c++函数生成调用图(八十)
  7. Jmeter 局域网的IP欺骗终极解决方案
  8. linux ppt演讲_适用于Linux用户的5种Microsoft Powerpoint替代方案
  9. Matlab回归分析
  10. quartz怎么玩?(基本使用和入门)