验证码1(简单介绍)

package cn.itcast.image;


import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


import javax.imageio.ImageIO;


import org.junit.Test;


/**
 * 动态生成图片
 * @author cxf
 *
 */
public class Demo {
@Test
public void fun1() throws FileNotFoundException, IOException {
/*
* 1. 创建图片缓冲区
* 2. 设置其宽高
* 3. 得到这个图片的绘制环境(得到画笔)
* 4. 保存起来
*/
BufferedImage bi = new BufferedImage(70, 35, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)bi.getGraphics();//得到绘制环境
g.setColor(Color.WHITE);//把环境设置为白色
g.fillRect(0, 0, 70, 35);//填充矩形!填充矩形,从0,0点开始,宽70,高35,即整个图片,即为图片设置背景色
g.setColor(Color.RED);//把环境设置为红色
g.drawString("Hello", 2, 35-2);//向图片上写入字符串,其中2,2表示x,y轴的坐标

ImageIO.write(bi, "JPEG", new FileOutputStream("F:/xxx.jpg"));
}

@Test
public void fun2() throws FileNotFoundException, IOException {
VerifyCode vc = new VerifyCode();
BufferedImage bi = vc.getImage();
VerifyCode.output(bi, new FileOutputStream("F:/xxx.jpg"));

System.out.println(vc.getText());
}

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
bbs论坛开发的部分源码1.3、实验内容 1、动态显示主版块信息 (1)在index.jsp上,使用page指令引入相关包,例如: <%@ page language="java" pageEncoding="GBK" import="java.util.*, s2jsp.lg.entity.*, s2jsp.lg.dao.*, s2jsp.lg.dao.impl.*"%> (2)编写脚本和表达式,得到板块Map并显示,只显示主版块信息 使用BoardDao的findBoard方法查找版块Map 使用for循环从Map中取出主版块信息 2、动态显示子版块信息、本版主题数、最后发表的主题 使用到的接口和方法 TopicDao findListTopic(int page,int boardId) findCountTopic(boardId) UserDao findUser(int uId) <!-- 子版块 --> <% List listSonBoard = (List)mapBoard.get( new Integer(mainBoard.getBoardId()) );//先取得主版块mainBoard的id for( int j=0; j<listSonBoard.size(); j++ ) { Board sonBoard = (Board)listSonBoard.get(j); // 循环取得子版块 Topic topic = new Topic(); // 最后发表的主题 User user = new User(); // 最后发表的主题的作者 int boardId = sonBoard.getBoardId(); List listTopic = topicDao.findListTopic( 1, boardId ); // 取得该板块主题列表 if( listTopic!=null && listTopic.size()>0 ) { topic = (Topic)listTopic.get(0); // 取得最后发表的帖子 user = userDao.findUser( topic.getUid() ); } %> 3、在detail.jsp上动态显示主题和回复的内容 实现思路及关键代码: 使用page指令引入包 使用到的接口和方法 设置页数page=1: 第1页:主题、回复 其他页:回复 页数、主题id用户id暂时固都定为1 接口和方法如下: TopicDao findTopic(int topicId) ReplyDao findListReply(int page,int topicId) UserDao findUser(int uId) 4、动态显示主题列表  让list.jsp动态显示“JSP技术”版块的主题列表  页数暂时固定为1,版块id暂时固定为“JSP技术”的版块boardId=9 使用到的接口和方法 TopicDao findListTopic(int page,int boardId) UserDao findUser(int uId) ReplyDao findCountReply(int topicId)
好的,下面详细介绍一下制作一个有验证码登录界面的具体步骤。 1. 设计登录界面 首先,需要设计一个登录界面,包括输入框、验证码图片、登录按钮等。可以使用 HTML、CSS 来实现。下面是一个简单的登录界面示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>验证码登录</title> <style type="text/css"> #captcha-img { margin-left: 10px; } </style> </head> <body> <form action="" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username"><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password"><br><br> <label for="captcha">验证码:</label> <input type="text" id="captcha" name="captcha"> <img id="captcha-img" src="captcha.png" alt="验证码"><br><br> <input type="submit" value="登录"> </form> </body> </html> ``` 2. 生成验证码图片 接下来,需要生成验证码图片。可以使用 Python 的 Pillow 库来实现。下面是一个简单的生成验证码图片的 Python 代码示例: ```python from PIL import Image, ImageDraw, ImageFont import random def generate_captcha(): # 随机生成验证码 captcha = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=4)) # 创建空白图片 image = Image.new('RGB', (120, 30), (255, 255, 255)) # 获取字体 font = ImageFont.truetype('arial.ttf', 25) # 创建绘图对象 draw = ImageDraw.Draw(image) # 绘制验证码 for i in range(4): draw.text((30*i+10, 0), captcha[i], font=font, fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) # 绘制干扰点和线条 for i in range(random.randint(0, 50)): draw.point((random.randint(0, 120), random.randint(0, 30)), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) for i in range(random.randint(0, 2)): draw.line((random.randint(0, 120), random.randint(0, 30), random.randint(0, 120), random.randint(0, 30)), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), width=2) # 保存验证码图片 image.save('captcha.png') return captcha ``` 这段代码会生成一个验证码图片,并将验证码保存在文件 `captcha.png` 中。同时,还会返回生成的验证码,以供后续验证使用。 3. 前端页面调用验证码图片并验证 接下来,在前端页面中调用生成的验证码图片,并在用户输入验证码时进行验证。可以使用 JavaScript 实现。下面是一个简单的 JavaScript 代码示例: ```javascript // 获取验证码图片 var captchaImg = document.getElementById('captcha-img'); // 点击验证码图片时重新获取验证码 captchaImg.addEventListener('click', function() { this.src = 'captcha.png?' + Math.random(); }); // 验证码输入框失去焦点时进行验证 var captchaInput = document.getElementById('captcha'); captchaInput.addEventListener('blur', function() { var xhr = new XMLHttpRequest(); xhr.open('POST', '/captcha'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { if (xhr.responseText == 'true') { alert('验证码正确!'); } else { alert('验证码错误,请重新输入!'); captchaImg.src = 'captcha.png?' + Math.random(); } } }; xhr.send('captcha=' + captchaInput.value); }); ``` 这段代码会在用户点击验证码图片时重新获取验证码图片,并在验证码输入框失去焦点时通过 AJAX 技术将用户输入的验证码发送到后端进行验证。如果验证码验证通过,则弹出提示框提示用户输入正确,否则弹出提示框提示用户验证码错误,并重新获取验证码图片。 4. 后端验证验证码的正确性 最后,需要在后端使用 Python 来验证验证码的正确性。可以将生成的验证码和用户输入的验证码进行比较,如果一致则验证通过,否则验证失败。下面是一个简单的 Python 代码示例: ```python from flask import Flask, request app = Flask(__name__) @app.route('/captcha', methods=['POST']) def captcha(): # 获取用户输入的验证码 captcha = request.form.get('captcha') # 获取生成的验证码 with open('captcha.txt', 'r') as f: captcha_true = f.read().strip() # 验证验证码是否正确 if captcha.lower() == captcha_true.lower(): return 'true' else: return 'false' if __name__ == '__main__': app.run(debug=True) ``` 这段代码使用 Flask 框架来实现一个简单的 Web 服务器,并提供一个 `/captcha` 的路由来处理验证码验证请求。当用户输入验证码时,会将用户输入的验证码作为 POST 请求的参数发送到 `/captcha` 路由,后端会读取文件 `captcha.txt` 中保存的真实验证码,并将用户输入的验证码和真实验证码进行比较。如果一致,则返回字符串 `'true'`,否则返回字符串 `'false'`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值