生成验证码

    xiaoxiao2026-08-28  0

    /** * 生成验证码 * * @param request * @param response * @throws IOException */ @RequestMapping(value = "randCode", produces = "image/jpeg") public void randCode(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("image/jpeg;charset=UTF-8"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 定义图片的宽度和高度 int width = 90, height = 40; // 创建一个图像对象 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 得到图像的环境对象 Graphics2D g = image.createGraphics(); Random random = new Random(); // 用随机颜色填充图像背景 g.setColor(getRandColor(180, 250)); g.fillRect(0, 0, width, height); for (int i = 0; i < 5; i++) { g.setColor(getRandColor(50, 100)); int x = random.nextInt(width); int y = random.nextInt(height); g.drawOval(x, y, 4, 4); } // 设置字体,下面准备画随机数 g.setFont(new Font("", Font.PLAIN, 40)); // 随机数字符串 String sRand = ""; for (int i = 0; i < 4; i++) { // 生成四个数字字符 String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 生成随机颜色 g.setColor(new Color(20 + random.nextInt(80), 20 + random .nextInt(100), 20 + random.nextInt(90))); //增加随机位置 g.translate(random.nextInt() % 10, random.nextInt() % 6); //增加随机倾斜 g.shear(0.1, 0); // 将随机数字画在图像上 g.drawString(rand, (17 + random.nextInt(2)) * i + 8, 34); // 生成干扰线 for (int k = 0; k < 16; k++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(9); int yl = random.nextInt(9); g.drawLine(x, y, x + xl, y + yl); } } // 将生成的随机数字字符串写入Session request.getSession().setAttribute(GEN_CODE, sRand); // 使图像生效 g.dispose(); // 输出图像到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); } private Color getRandColor(int fc, int bc) { Random rand = new Random(); if (fc > 255) { fc = 255; } if (bc > 255) { bc = 255; } int r = fc + rand.nextInt(bc - fc); int g = fc + rand.nextInt(bc - fc); int b = fc + rand.nextInt(bc - fc); return new Color(r, g, b); }

    爱学习的朋友们加 刚建的qq群交流学习<程序员之家 227493974>

    转载请注明原文地址: https://ju.6miu.com/read-1311636.html
    最新回复(0)