一、创建image工具类

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

public class ImageUtil {

// 图片的宽度。

private int width = 160;

// 图片的高度。

private int height = 40;

// 验证码字符个数

private int codeCount = 5;

// 验证码干扰线数

private int lineCount = 150;

// 验证码

private String code = null;

private char[] codeSequence = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘, ‘J‘,

‘K‘, ‘L‘, ‘M‘, ‘N‘, ‘P‘, ‘Q‘, ‘R‘, ‘S‘, ‘T‘, ‘U‘, ‘V‘, ‘W‘,

‘X‘, ‘Y‘, ‘Z‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘};

private BufferedImage bufferedImage;

private ImageUtil(int width, int height){

this.width = width;

this.height = height;

}

public ImageUtil(int width, int height, int codeCount, int lineCount){

this(width, height);

this.codeCount = codeCount;

this.lineCount = lineCount;

createCodeImage();

}

private void createCodeImage(){

//字符所在x坐标

int x = 0;

//字体高度

int fontHeight = 0;

//字符所在y坐标

int codeY = 0;

int red = 0;

int green = 0;

int blue = 0;

x = width / (codeCount + 2);

fontHeight = height - 2;

codeY = height - 4;

bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics2D graphics2D = bufferedImage.createGraphics();

Random random = new Random();

graphics2D.setColor(Color.WHITE);

graphics2D.fillRect(0, 0, width,height);

Font font = new Font("Fixedays",Font.PLAIN,fontHeight);

graphics2D.setFont(font);

for (int i = 0; i < lineCount; i++) {

//x轴第一个点的位置

int x1 = random.nextInt(width);

//y轴第一个点的位置

int y1 = random.nextInt(height);

//x轴第二个点的位置

int x2 = x1 + random.nextInt(width >> 2);

//y轴第二个点的位置

int y2 = y1 + random.nextInt(height >> 2);

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

graphics2D.setColor(new Color(red, green, blue));

graphics2D.drawLine(x1, y1, x2, y2);

}

StringBuffer randomCode = new StringBuffer(codeCount);

for (int i = 0; i < codeCount; i++) {

String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

graphics2D.setColor(new Color(red, green, blue));

graphics2D.drawString(strRand, (i +1) * x, codeY);

randomCode.append(strRand);

}

code = randomCode.toString();

}

public void write(String path) throws IOException {

OutputStream outputStream = new FileOutputStream(path);

this.write(outputStream);

outputStream.flush();

outputStream.close();

}

public void write(OutputStream outputStream) throws IOException {

ImageIO.write(bufferedImage, "png", outputStream);

}

public BufferedImage getBufferedImage(){

return bufferedImage;

}

public String getCode(){

return code;

}

}

二、controller

@GetMapping(value = "/code")

public String getCode(HttpServletRequest request, HttpServletResponse response) throws Exception{

response.setContentType("image/jpeg");

//禁止图像缓存

response.setHeader("Pragma","no-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

HttpSession session = request.getSession();

ImageUtil imageUtil = new ImageUtil(120, 40, 5,30);

session.setAttribute("code", imageUtil.getCode());

imageUtil.write(response.getOutputStream());

return null;

}

三、前台调用

$("#vimg").on("click",function () { var timestamp = (new Date()).valueOf(); $(this).attr("src","code?timestamp=" + timestamp); });

java实现图片验证码_JAVA实现图片验证码相关推荐

  1. java验证图片大小_java 校验图片的大小、尺寸、比例

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.i ...

  2. java邮箱验证码_Java实现邮箱验证码

    原标题:Java实现邮箱验证码 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 邮箱验证码 一般能使用邮箱注 ...

  3. java 图片水印_JAVA实现图片水印

    一.JAVA图片水印实现原理 1.1.JAVA图片水印实现思路 1.创建缓存图片对象. 2.创建Java绘图工具对象. 3.使用绘图工具对象将原图绘制到缓存图片对象. 4.使用绘图工具将水印(文字/图 ...

  4. java制作水效果_java实现图片加水印效果

    图片加水印代码,这些代码不常用,但是用到的时候需要注意的地方也挺多的,每次都重写比较麻烦,记下来备忘.代码是图片加水印的一般流程,可根据实际项目需要自行修改. 注:代码在JPG和PNG格式图片下测试通 ...

  5. java 修改图片分辨率_java 修改图片的像素大小,清晰度

    修改图片的像素,清晰度 代码 /** * 改变图片 像素 * * @param file * @param qality 参数qality是取值0~1范围内 清晰程度 数值越小分辨率越低 * @par ...

  6. background图片叠加_java实现图片的叠加效果

    实现效果图 这个效果的实现思路是: 1.先准备一张背景图,像素自己去定.像素越高最后生成的图片会更清晰,当然图片也会越大,注意这个背景图一定要是png格式的,要放用户头像的位置要镂空,透明的. 至于为 ...

  7. java 当中的验证码_Java Web中验证码的实现

    验证码本质上是一张图片,即应该用标签,其中src属性决定了这是一张什么图片,因此可以让src为某一Action,每次点击时,都会更新这个src属性. ① 前台JSP页面 My JSP 'imgcode ...

  8. java 登录验证码_java实现登录验证码

    本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...

  9. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

最新文章

  1. 开源oa_开源OA:可以轻松支持云文档管理
  2. 工业界常用的三维重建技术有哪些?
  3. 2.1.4 什么是ASCII码?汉字的表示和编码是怎样的?
  4. 双流棠湖中学怎么样_2020年双流中学和棠湖中学哪个好?
  5. java获取表主外键_通过 jdbc 分析数据库中的表结构和主键外键
  6. Android 第五课 常用控件的使用方法(TextView、Button、EditView、 ImageView、 ProgressBar、 ProgressDialog等)
  7. 高可用性的HDFS—Hadoop分布式文件系统深度实践
  8. 图论 —— 网络流 —— 费用流 —— zkw 费用流
  9. 创建设计模式 - 抽象工厂设计模式
  10. 计算机网络笔记整理(第七版)谢希仁
  11. 如何在线批量将JPG图片转Word文件
  12. 麒麟案例 | 创业之路,跨境起“杭”
  13. pm runtime
  14. 关于boa+cgi上传文件大小的问题
  15. HTML系列之文本格式化标签
  16. html画布里增添颜色,在HTML5画布中更改笔触颜色
  17. 计算机word插图教案,中学信息技术《配插图》教案
  18. algebraic reconstruction technique (ART)算法
  19. android gta5 下载地址,gta5 for android
  20. 程序设计-在校整理-02 食堂自动化管理系统

热门文章

  1. mysql获取中文拼音_mysql获取汉字拼音
  2. 计算机组成与系统结构(物联网专业)
  3. MTK资料:在MT6735平台上如何调试SII9024A
  4. 计算机相关装备有哪些,DNF装备搭配计算器_官方网站_17173DNF专区_17173.com中国游戏门户站...
  5. BeyondCompare使用
  6. C++ 语言禁止派生类 - final specifier
  7. 图像处理笔试题面试题
  8. 移动硬盘拷贝linux文件,Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份
  9. 微软小娜关闭服务器,请问微软小娜 (Cortana) 要退出中国了吗?
  10. java毕业设计——基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码)——网络新闻分析系统