From 1facfdc9361d888d72c959bac4d8fb05dcad02d7 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 07 Jul 2022 18:27:06 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/farmer-cms

---
 src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java b/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java
index 3179140..49f86b8 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java
@@ -10,7 +10,8 @@
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.Map;
+import java.util.*;
+import java.awt.*;
 
 @Component
 public class CaptchaUtil {
@@ -24,7 +25,7 @@
         //生成文字验证码
         String text = producer.createText();
         //生成文字对应的图片验证码
-        BufferedImage image = producer.createImage(text);
+        BufferedImage image = creatImage(text);
         //将图片写出
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         ImageIO.write(image, "jpg", outputStream);
@@ -35,4 +36,56 @@
         token.put("img", encoder.encode(outputStream.toByteArray()));
         return Result.ok(token);
     }
+
+    private static final long serialVersionUID = 1L;
+
+    //给定范围获得随机颜色
+    public 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);
+    }
+
+    public BufferedImage creatImage(String code) {
+        int width = 150, height = 42;
+        //生成随机类
+        Random random = new Random();
+        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        //获取图形上下文
+        Graphics g = image.getGraphics();
+        // 设定背景色
+        g.setColor(getRandColor(200, 250));
+        g.fillRect(0, 0, width, height);
+        //设定字体 第二个参数为字体为加粗
+        g.setFont(new Font("Times New Roman", Font.BOLD, 45));
+        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
+        g.setColor(getRandColor(160, 200));
+        for (int i = 0; i < 155; i++) {
+            int x = random.nextInt(width);
+            int y = random.nextInt(height);
+            int xl = random.nextInt(12);
+            int yl = random.nextInt(12);
+            g.drawLine(x, y, x + xl, y + yl);
+        }
+        // 取随机产生的认证码(4位数字)
+        for (int i = 0; i < code.length(); i++) {
+            String rand = code.substring(i, i + 1);
+            // 将认证码显示到图象中
+            g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
+            //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
+            g.drawString(rand, 30 * i + 18, 35);
+        }
+        // 图象生效
+        g.dispose();
+        return image;
+    }
+
 }

--
Gitblit v1.9.1