java servlet图片_java Servlet产生验证码图片

书写验证码产生程序:

package com.bobo.shopping.common.util;

/**

*

Title:用于产生校验码的servlet类

*

Description:用于产生校验码的servlet类

* @version 1.0

*/

import java.awt.Color;import java.awt.Font;

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 CheckCodeServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private static int codeLength = 4; //验证码位数

private static int imageWidth = 60; //图片宽度

private static int imageHeight = 20; //图片高度

public void doGet(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {

//设置页面不缓存

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

// 在内存中创建图象

BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文

Graphics g = image.getGraphics();

//生成随机类

Random random = new Random();

// 设定背景色

g.setColor(getRandColor(200, 250));

g.fillRect(0, 0, imageWidth, imageHeight);

//设定字体

g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

//画边框

g.setColor(new Color(20,20,20));

g.drawRect(0, 0, imageWidth - 1, imageHeight - 1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160, 200));

for (int i = 0; i < 155; i++) {

int x = random.nextInt(imageWidth);

int y = random.nextInt(imageHeight);

int xl = random.nextInt(12);

int yl = random.nextInt(12);

g.drawLine(x,y,x+xl,y+yl);

}

// 取随机产生的认证码

// 可以自己设置数字字母等,本例只是产生数字

String sRand = "";

for (int i = 0;i < codeLength; i++) {

String rand = String.valueOf(random.nextInt(10));

sRand += rand;

// 将认证码显示到图象中

// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));

g.drawString(rand, 13 * i + 6, 16);     }

// 将认证码存入SESSION中

// 获取方式  request.getSession().getAttribute("checkCode");

request.getSession().setAttribute("checkCode", sRand);

// 图象生效

g.dispose();

// 输出图象到页面

ImageIO.write(image, "JPEG", response.getOutputStream());

}

/**   * 获取随机颜色

* @param fc

* @param bc

* @return

*/

private Color getRandColor(int fc,int bc) {

Random random = new Random();

if(fc > 255) {

fc = 255;

}

if(bc > 255) {

bc = 255;

}

int r = fc + random.nextInt(bc - fc);

int g = fc + random.nextInt(bc - fc);

int b = fc + random.nextInt(bc - fc);

return new Color(r, g, b);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值