博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个产生随机图片验证码的示例
阅读量:6232 次
发布时间:2019-06-21

本文共 3400 字,大约阅读时间需要 11 分钟。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
package com.wyf.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class PrintServlet extends HttpServlet {
// 设置要随机生成的数 public static final char[] chars = { '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public static Random random = new Random(); // 随机生成数 public static String getRandomString(){ // 随机获取6位数 StringBuffer buffer = new StringBuffer(); // 字符串缓存 boolean[] result = new boolean[chars.length]; int i = 0; while(i<6){ // 总共产生6个不同的随机数 int index = random.nextInt(chars.length); if(result[index]){ //表示该随机数已经产生了 continue; } result[index]= true; buffer.append(chars[index]); // 每次获得一个随机产生的字符 i++; } return buffer.toString(); } public static Color getRandomColor(){ //获取随机产生的颜色 return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); } public static Color getRandomColor(Color c){ // 返回颜色的反色 return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue()); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("image/jpeg"); // 设置输出类型 String randomString = getRandomString(); // 随机字符串 req.getSession(true).setAttribute("randomString", randomString); // 放到sessio中 int width = 200; // 设置图片宽度 int height = 50; // 设置图片的高度 Color color = getRandomColor();// 设定随机产生颜色, 用于设定背景颜色 Color reverse = getRandomColor(); // 反色, 用于设定前景色 BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 创建一个彩色图片 Graphics2D g = bi.createGraphics(); // 获取绘图对象 g.setFont(new Font("宋体", Font.BOLD, 16)); // 设置随机数的字体 g.setColor(color); // 设置随机数的颜色 g.fillRect(0, 0, width, height);// 绘制随机数的背景 g.setColor(reverse); //设置随机数的颜色 g.drawString(randomString, 18, 20); // 绘制随机字符 for(int i = 0,n = random.nextInt();i < n; i++){ // 设置随机数中最多有100个噪点 g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); // 随机噪音点 } ServletOutputStream out = resp.getOutputStream(); // 将随机数转换为JPEG图片格式 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); // 设置编码器 encoder.encode(bi); // 对图片进行编码 out.flush(); // 输出到客户端 } }

附上html:

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
   Identity.html 

web.xml配置:

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
PrintServlet
PrintServlet
com.wyf.servlet.PrintServlet
PrintServlet
/PrintServlet

 

转载于:https://www.cnblogs.com/FCWORLD/archive/2011/10/20/2219229.html

你可能感兴趣的文章
判断Fragment是否对用户可见
查看>>
Mac通过SSH实现免密输入登录阿里云服务器,实例重新初始化磁盘再配置
查看>>
如何查询日志文件中的所有ip,正则表达式
查看>>
Swift4 2 UITableView 基本用法
查看>>
Python 教你轻松下载网易音乐歌曲
查看>>
Google 为什么以 Flutter 作为原生突破口
查看>>
[Video.js]隐藏和显示视频播放器控件
查看>>
你用过不写代码就能完成一个简单模块的组件么?
查看>>
vue项目配置生产环境和发布环境的接口地址
查看>>
学习笔记(4.21)
查看>>
解决Echarts中多条markLine的Label重叠问题
查看>>
用 Unity 做个游戏(七) - TCP Socket 客户端
查看>>
npm安装vue-cli报错 -4058 的解决方法
查看>>
2019年首发,有耐心且多思考
查看>>
ios UIWindow swift
查看>>
阿里云态势感知服务相关概念
查看>>
PHP 字符串中的 Heredoc 和 Nowdoc
查看>>
京东淘宝始料未及,小程序将是未来首选购物渠道
查看>>
js事件冒泡和传播详细解释
查看>>
笔试题
查看>>