JSP随机验证图片如何制作

   2015-10-08 0
核心提示:这篇文章主要介绍了JSP随机验证图片是如何制作的,感兴趣的朋友可以参考一下

小编整理了一篇关于模仿腾讯随机验证图片的文章。下面直接上代码吧!一个Java 类和一个JSP 页面。

Java类代码:

以下是JSP模仿腾讯随机验证图片引用片段:

package icewee.image;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.util.Random;

public class TokenUtil {
  private static final String base = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefhijklmnpqrstuvwxyz";
  private static final int length = base.length();

  public static BufferedImage createTokenImage(int width, int height,
      String randomCode) {
    BufferedImage image = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    Graphics2D g = image.createGraphics();
    Random random = new Random();
    g.setColor(new Color(230, 230, 250)); // 设置背景色
    g.fillRect(0, 0, width, height); // 填充背景
    g.setColor(Color.BLACK);
    // 绘制边缘
    g.drawRect(-1, -1, width + 1, height + 1);
    g.setColor(Color.GRAY);
    // 设置字体,随机选择字体,暂设置8种字体
    Font font = new Font((new String[] { "Arial", "Arial Black",
        "Arial Italic", "Courier New", "Courier New Bold Italic",
        "Courier New Italic", "Franklin Gothic Medium",
        "Franklin Gothic Medium Italic" })[random.nextInt(8)],
        Font.PLAIN, 30);
    // g.setStroke(new BasicStroke((float)(Math.random()),
    // BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
    g.setFont(font);
    // 定义字体颜色范围
    int red = random.nextInt(160), green = random.nextInt(50), blue = random
        .nextInt(50);
    // 定义一个无干扰线区间和一个起始位置
    int nor = random.nextInt(50), rsta = random.nextInt(131);
    // 绘制干扰正弦曲线 M:曲线平折度, D:Y轴常量 V:X轴焦距
    int M = random.nextInt(15) + 5, D = random.nextInt(23) + 15, V = random
        .nextInt(5) + 1;
    double x = 0.0;
    double y = M * Math.sin(Math.toRadians(V * x)) + D;
    double px, py;
    for (int i = 0; i < 131; i++) {
      px = x + 1;
      py = M * Math.sin(Math.toRadians(V * px)) + D;
      if (rsta < i && i < (rsta + nor))
        g.setColor(new Color(230, 230, 250));
      else
        g.setColor(new Color(red, green, blue));
      // 随机设置像素点宽带(线宽)
      g.setStroke(new BasicStroke((float) (Math.random() + 1.5f)));
      g.draw(new Line2D.Double(x, y, px, py));
      x = px;
      y = py;
    }
    char[] codes = randomCode.toCharArray();
    for (int i = 0; i < codes.length; i++) {
      // 旋转图形
      int degree = (random.nextInt(20) - 10) % 360;
      double ang = degree * 0.0174532925; // 将角度转为弧度
      g.rotate(ang, width / 2, height / 2);
      g.setColor(new Color(red, green, blue));
      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
          RenderingHints.VALUE_ANTIALIAS_ON);
      int gr = random.nextInt(8);
      g.drawString(String.valueOf(codes[i]), 24 * i + 10 + gr, 38);
    }
    g.dispose();
    return image;
  }

  public static String createRandomCode(int size, int width, int height) {
    StringBuffer randomCode = new StringBuffer();
    for (int i = 0; i < size; i++) {
      Random random = new Random();
      int start = random.nextInt(length);
      String strRand = base.substring(start, start + 1);
      randomCode.append(strRand);
    }
    return randomCode.toString();
  }
}

JSP页面:

以下是JSP模仿腾讯随机验证图片代码引用片段:

<%@ page contentType="image/jpeg" pageEncoding="GBK"%>
<%@ page import="java.awt.image.BufferedImage" %>
<%@page import="javax.imageio.ImageIO" %>
<%@ page import="com.icesoft.image.TokenUtil" %>

<%
  //设置页面不缓存
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
  int width = 120, height = 50;
  String randomCode = TokenUtil.createRandomCode(4, width, height);
  System.out.println("生成的随机码:" + randomCode);
  BufferedImage image = TokenUtil.createTokenImage(width, height, randomCode);
  ImageIO.write(image, "JPEG", response.getOutputStream());
  response.flushBuffer();
  out.clear();
  out = pageContext.pushBody();
%>

以上就是JSP 模仿腾讯随机验证图片全部代码,希望对大家的学习有所帮助。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • LUA解析json小demo
    需要修改的json数据gui-config.json{"configs": [{"server": "JP3.ISS.TF","server_port": 443,"password": "58603228","method": "aes-256-cfb","remarks": ""},{"serv
    03-16
  • 使用 ESModule 和 TypeScript 构建 Node.js 环境
    使用 ESModule 和 TypeScript 构建 Node.js 环
    介绍由于我经常使用 React,所以我在前端接触过 Node.js,但我从未接触过后端。正常搭建环境的时候,不能使用import语句,变成了require语句,很不方便。我认为有各种各样的错误,所以如果你能指出它们,我将不胜感激。执行环境macOS 蒙特雷 ver12.5.1MacBook
    03-08
  • 使用 Node.js (TypeScript) 和 Azure Functions 创建无服务器 REST API,并获得 CosmosDB 更改源作为奖励。
    使用 Node.js (TypeScript) 和 Azure Functions
    介绍在本文中,我们将使用 azure 函数和 ComsmosDB 创建一个无服务器 REST API 应用程序。使用的语言是 Node.js/TypeScript。此外,由于我们使用 CosmosDB 作为数据库,因此我们将使用 Azure 函数触发器接收 Change Feed 事件作为奖励。创建资源创建资源组az
    03-08
  • 安装 TypeScript 并编译成JS
    安装 TypeScript 并编译成JS
    官网: https://github.com/microsoft/TypeScriptTypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。TypeScript是一种应用级JavaScript语言。TypeScript为JavaScript添加了可选类型,支持针对任何浏
    03-08
  • 使用TypeScript,AngularJs和Web API构建基本的C
    原文地址:using typescript with angularjs and web api 版权归其作者所有.在这篇文章中我将向大家展示如何使用TypeScript,Angular Js 和Asp.net Web API 来构建一个基本的实现CRUD功能的Web应用程序. Typescript提供了一系列的功能来方便程序员构造和组织更
    02-10
  • 打造自己的 nodejs 静态文件服务器(帖子内容,
    用NodeJS打造你的静态文件服务器在《The Node Beginner Book》的中文版(http://nodebeginner.org/index-zh-cn.html)发布之后,获得国内的好评。也有同学觉得这本书略薄,没有包含进阶式的例子。@otakustay同学说:“确实,我的想法是在这之上补一个简单的MV
    02-10
  • NodeJS无所不能:细数10个令人惊讶的NodeJS开源
    在几年的时间里,NodeJS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用NodeJS进行开发,像PayPal,此外,开发人员还可以使用它来开发一些快速移动Web框架。  除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其
    02-10
  • JS在与lua的交互心得 lua.js
    JS在与lua的交互心得 lua.js
     最近在写一个项目,前端技术使用的是Vue,在与lua的交互过程,是通过一个公共JS,前端调用公共js的方法给lua发送命令,lua接到命令,去执行一些方法,然后又通过回调返回到了前端,由于是第一次写这样的项目,遇到了一些坑,总结下。1、提示null is not an
    02-09
  • typescript结合three.js
    import * as THREE from "three";// https://github.com/pinqy520/three-typescript-starter/blob/master/src/index.tsclass Game{private _scene: THREE.Scene;//private _canvas: HTMLCanvasElement;private _camera: THREE.PerspectiveCamera;private _ren
    02-09
  • typescript Json Convert
    关键代码this.data={};// json stringthis.dataStr=JSON.stringify(this.data);// json objectthis.convertData=JSON.parse(this.dataStr);示例代码示例代码参考资料TypeScript: Working with JSON
    02-09
点击排行