fontList = new ArrayList();

fontList.add(new Font("微软 雅黑", Font.LAYOUT_NO_START_CONTEXT, 30));// 可以设置斜体之类的

DefaultWordRenderer dwr = new DefaultWordRenderer(getRandomColor(), fontList);

// 加入多种颜色后会随机显示 字体空心

WordRenderer wr = dwr;

// 增加文本,默认为5个随机字符.

if (_text == null) {

builder.addText();

} else {

String[] ts = _text.split(",");

for (int i = 0; i < ts.length; i++) {

String[] ts1 = ts[i].split(":");

if ("chinese".equals(ts1[0])) {

builder.addText(new ChineseTextProducer(Integer.parseInt(ts1[1])), wr);

} else if ("number".equals(ts1[0])) {

// 这里没有0和1是为了避免歧义 和字母I和O

char[] numberChar = new char[] { '2', '3', '4', '5', '6', '7', '8' };

builder.addText(new DefaultTextProducer(Integer.parseInt(ts1[1]), numberChar), wr);

} else if ("word".equals(ts1[0])) {

// 原理同上

char[] numberChar = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r',

'w', 'x', 'y' };

builder.addText(new DefaultTextProducer(Integer.parseInt(ts1[1]), numberChar), wr);

} else {

builder.addText(new DefaultTextProducer(Integer.parseInt(ts1[1])), wr);

}

}

}

// --------------添加背景-------------

// 设置背景渐进效果 以及颜色 form为开始颜色,to为结束颜色

// GradiatedBackgroundProducer gbp=new GradiatedBackgroundProducer();

// gbp.setFromColor(Color.yellow);

// gbp.setToColor(Color.red);

// 无渐进效果,只是填充背景颜色

// FlatColorBackgroundProducer fbp=new

// FlatColorBackgroundProducer(Color.red);

// 加入网纹--一般不会用

// SquigglesBackgroundProducer sbp=new SquigglesBackgroundProducer();

// 没发现有什么用,可能就是默认的

// TransparentBackgroundProducer tbp = new

// TransparentBackgroundProducer();

// builder.addBackground(gbp);

// ---------装饰字体---------------

// 字体边框齿轮效果 默认是3

builder.gimp(new BlockGimpyRenderer(1));

// 波纹渲染 相当于加粗

// builder.gimp(new RippleGimpyRenderer());

// 修剪--一般不会用

// builder.gimp(new ShearGimpyRenderer(Color.red));

// 加网--第一个参数是横线颜色,第二个参数是竖线颜色

// builder.gimp(new FishEyeGimpyRenderer(Color.red,Color.yellow));

// 加入阴影效果 默认3,75

// builder.gimp(new DropShadowGimpyRenderer());

// 创建对象

Captcha captcha = builder.build();

req.getSession().setAttribute("simpleCaptcha", captcha);

resp.setHeader("Cache-Control", "private,no-cache,no-store");

resp.setContentType("image/png");

try {

OutputStream os = resp.getOutputStream();

ImageIO.write(captcha.getImage(), "png", os);

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public Color getRandomColor() {

int n = RandomUtils.nextInt(100);

if (n % 3 == 1) {

return Color.RED;

} else if (n % 3 == 2) {

return Color.BLUE;

}

return Color.GREEN;

}

}

java 验证码 源码_java 验证码生成源码相关推荐

  1. java 转码_JAVA自带转码方式的学习

    最近工作中遇到一个问题,由于海外系统环境默认采用UTF-8格式编码,以支持多语言环境.而国内系统由于只需要支持中英文,故默认采用GBK编码格式.因此当把海外环境生成的交易报告单发送给国内的报表系统时, ...

  2. php 生产一维码,透过 PHP 生成 一维码

    通过 PHP 生成 一维码 此代码来自 http://www.nixiaofeng.com/110.html 13) die('条码长度不正确'); if (strlen($code) == 12) ...

  3. java 线程池 源码_java线程池源码分析

    我们在关闭线程池的时候会使用shutdown()和shutdownNow(),那么问题来了: 这两个方法又什么区别呢? 他们背后的原理是什么呢? 线程池中线程超过了coresize后会怎么操作呢? 为 ...

  4. java join 源码_java并发:join源码分析

    join join join是Thread方法,它的作用是A线程中子线程B在运行之后调用了B.join(),A线程会阻塞直至B线程执行结束 join源码(只有继承Thread类才能使用) 基于open ...

  5. java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...

    看到这个问题,真心觉得初学入门就用IDE真心不是一个好方法.IDE屏蔽了太多基础知识,比如Java是需要编译的,运行的是编译后的class文件.编译命令有编译参数,执行命令有执行命令的参数.还有环境变 ...

  6. Java绘画板源码_Java 绘图板 示例源码下载(画板)

    Java 绘图板 示例源码下载(画板) java 2020-8-21 下载地址 https://www.codedown123.com/36795.html package minidrawpad; ...

  7. java单机版软件源码_Java五子棋单机版源码分享

    初学JavaGUI编程,就写了一个小游戏–五子棋. 目前只实现了单机版,任何事情都是从简制作的,有问题请大牛们不吝指教啊. 此处的棋盘和棋子都未用图片,全部都是使用Java中的Graphics画出来的 ...

  8. java compareto源码_java中compareTo源码解析(String类型)

    官网API(JDK13): 先上结论: 1.计算compareTo两边字符串的总长度(length()) 2.求出总长度中的最小值 3.如果长度相等,比较ASCII值相同,返回0 4.如果长度不相同, ...

  9. java接口源码_java collection接口源码

    package java.util; /* * 1.Collection接口是集合继承关系中的根接口(root interface),有些集合允许重复元素, * 有些集合有序,JDK不提供本接口的实现 ...

最新文章

  1. Logback日志使用详解
  2. python字符串与文本处理技巧(2):大小写敏感搜索、最短匹配、多行匹配、Unicode标准化
  3. m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
  4. 借助 Cloud Toolkit 快速创建 Dubbo 工程
  5. connect.js源码解析
  6. 羊皮卷的故事-第十七章-羊皮卷之十
  7. java 缓存日志_Java日志缓存机制的实现(3)
  8. python基础--列表,元组
  9. 360 组织全局 HOOK 的 dll 加载
  10. @autowired注解 抽象类_Spring容器注解注入
  11. tbslog乱码转换_日文游戏乱码怎么办 乱码转换工具LocaleEmulator
  12. 旅游管理系统项目java设计_基于JSP的旅游管理系统设计与实现(MyEclipse,SQL)
  13. springmvc-带预览的异步上传图片功能
  14. jdk+jmeter下载安装教程
  15. vue 手机号正则表达式
  16. 经典路径规划算法分类概述(更新中)
  17. 【数学与算法】泰勒公式_线性化_雅各比矩阵_黑塞矩阵
  18. 2022南京商业贷款提前还款
  19. 优化策略5 Label Smoothing Regularization_LSR原理分析
  20. hive集群tez引擎执行任务卡住

热门文章

  1. 用ProFTPD构建FTP服务器
  2. Java基础-特殊数据类型:枚举
  3. 在GridView中的批量删除!
  4. 谭浩强C程序设计的课后习题答案
  5. IPIP地址、ipv4ipv6、子网掩码、网段计算、网络广播ID计算、默认网关、DNS服务器、DHCP服务器
  6. c++构建工具之shell,configure,make,cmake,scons,xmake简析总结
  7. Python—UnicodeEncodeError: 'ascii' codec can't encode/decode characters
  8. Oracle起步——Oracle 11g安装配置
  9. ubuntu12.04LTS下eclipse indigo版配置opencv2.4.9
  10. java主键后四位顺序号_JAVA中取顺序号 (转)