验证码技术(BufferedImage)
来源:互联网 发布:c 高级编程第10版教程 编辑:程序博客网 时间:2024/06/06 12:45
验证码技术的主要技术入口是java.awt.image.BufferedImage类:
通过public GraphicsgetGraphics() 此方法返回Graphics2D
package cn.hncu.demo;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import org.junit.Test;public class ImageCodeDemo {@Test//把字符串"hello"变成图片写入到图片文件中 --技术入口:java.awt.image.BufferedImagepublic void demo1() throws FileNotFoundException, IOException{//定义图片的宽、高int w=60;int h=30;//创建一个内存图片BufferedImage img=new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);//获取 Graphics对象Graphics g = img.getGraphics();g.drawString("hello", 0, 30);//让图形生效(把g对象刷到img中)g.dispose();//把内存图片img输出到一个文件中ImageIO.write(img, "JPEG", new FileOutputStream("./1.jpg"));}@Test//把生成4个数字的验证码写到图片中public void demo2() throws FileNotFoundException, IOException{//创建一个内存图片BufferedImage img=new BufferedImage(60, 30, BufferedImage.TYPE_INT_RGB);//获取Graphic对象Graphics g = img.getGraphics();//设置背景色g.setColor(Color.WHITE);g.fillRect(0, 0, 60, 30);Random r=new Random();for(int i=0;i<4;i++){int a=r.nextInt(10);//生成0-9之间的一个数字int y=10+r.nextInt(20);//y坐标随机//每个数字不同的颜色g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));g.drawString(a+"", i*10, y);}//话干扰线for(int i=0;i<10;i++){g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));g.drawLine(10+r.nextInt(60), 5+r.nextInt(30), 10+r.nextInt(60), 5+r.nextInt(30));}//让图片生效g.dispose();//把内存图片写入到文件中ImageIO.write(img, "JPEG", new FileOutputStream("./2.jpg"));}}1.jpg:
2.jpg
下面使用前端加后台的形式:
1:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>开始学习后台</title> </head> <body> <h1>开始学习后台的第一个页面</h1> <h1>开始学习后台的第一个页面</h1> <h1>开始学习后台的第一个页面</h1> <h1>开始学习后台的第一个页面</h1> <a href="jsps/2.jsp">第二个</a> <a href="aa">aa</a> <hr/> <a href="one?name=dragon&age=21">使用serlet--用java写的一个类</a> <br/> <form action="one" method="post"> name:<input type="text" name="name"/><br/> age:<input type="text" name="age"/> 验证码:<input type="text" name="code"/> <img id="img1" src="h"> <a href="javascript:changeImage();">看不清</a> <input type="submit" value="登录"> </form> <script type="text/javascript"> function changeImage(){ var oImg=document.getElementById("img1"); var t = new Date().getTime(); oImg.src="h?"+t; } </script> </body></html>2:web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>hello3</servlet-name> <jsp-file>/WEB-INF/aa/3.jsp</jsp-file> </servlet> <servlet> <servlet-name>one</servlet-name> <servlet-class>cn.hncu.serlet.OneSerlet</servlet-class> </servlet> <servlet> <servlet-name>hCode</servlet-name> <servlet-class>cn.hncu.serlet.ImageCodeSevlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hCode</servlet-name> <url-pattern>/h</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello3</servlet-name> <!-- 注意,映射路径不能以/WEB-INF开头,因为这是安全路径 --> <url-pattern>/aa</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>one</servlet-name> <url-pattern>/one</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>ImageCodeSevlet.java
package cn.hncu.serlet;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ImageCodeSevlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//创建一个内存图片BufferedImage img=new BufferedImage(60, 30, BufferedImage.TYPE_INT_RGB);//获取Graphic对象Graphics g = img.getGraphics();//设置背景色g.setColor(Color.WHITE);g.fillRect(0, 0, 60, 30);Random r=new Random();for(int i=0;i<4;i++){int a=r.nextInt(10);//生成0-9之间的一个数字int y=10+r.nextInt(20);//y坐标随机//每个数字不同的颜色g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));g.drawString(a+"", i*10, y);}//话干扰线for(int i=0;i<10;i++){g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));g.drawLine(r.nextInt(60), r.nextInt(30), r.nextInt(60), r.nextInt(30));}//让图片生效g.dispose();//把图片输入到网络ImageIO.write(img, "JPEG", resp.getOutputStream());}}OneSerlet.java
package cn.hncu.serlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OneSerlet extends HttpServlet{/** * Request:客户端上传的消息 * Response:向客户端发的消息 */@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("一个服务来了");//从客户端接收上传的参数String name=req.getParameter("name");String age=req.getParameter("age");System.out.println("name:"+name+",age:"+age);//向客户端发送应答消息//resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");PrintWriter pw = resp.getWriter();pw.println("第一次服务。");pw.println("您输入的信息是:"+"name:"+name+",age:"+age);}}
阅读全文
0 0
- 验证码技术(BufferedImage)
- 验证码----(BufferedImage)
- java开发_使用BufferedImage生成验证码
- BufferedImage
- BufferedImage
- 验证码图片显示不了,并且抛出bufferedimage之类的exception
- java-BufferedImage 图片验证码去除干扰线的方法( 用于OCR tesseract图像智能字符识别)
- 验证码技术
- 解密验证码技术
- 解密验证码技术
- 解密验证码技术
- 验证码识别技术
- 解密验证码技术
- 验证码技术学习
- 验证码识别技术
- 验证码识别技术
- 验证码识别技术
- 验证码识别技术
- vue 初识 --小菜鸟笔记
- SSH 无密码登录 伪分布式
- day09-JS 变量、事件、对象创建
- Linux简易命令手册
- cookie属性和方法详解
- 验证码技术(BufferedImage)
- AC自动机学习、
- PhxQueue:高可用、高可靠、高性能的分布式队列
- SSM框架整合
- 嵌入式Linux学习笔记(三)文件编程
- Spring高级话题-计划任务-@EnableScheduling
- BZOJ 1045 [HAOI2008] 糖果传递
- logsit回归代码的推导
- HTTP的特性