博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
送给“正在纠结”、“准备纠结”的前端开发们
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
谈DELL收购EMC
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
學習 React.js:用 Node 和 React.js 創建一個實時的 Twitter 流
查看>>
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>