• 用JAVA中BufferedImage画出漂亮的验证码点击变化


    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样:

    点击变化,以下是实现过程,直接上代码:

     首先前台:<i><img style="height:22px;" id="zcodeImg" alt="点击更换" title="点击更换" src="" /></i>放在你页面想展示的位置;接着页面加载时

    1
    2
    3
    4
    5
    $(document).ready(function() {
            changeCode1();
            $("#codeImg").bind("click", changeCode1);
        });
     
    function changeCode1() {
    $("#codeImg").attr("src", "code.do?t=" + genTimestamp());//secCodeController
    }

    js部分写完了,现在是控制层,直接上代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    @Controller
    @RequestMapping("/code")
    public class SecCodeController {
     
        @RequestMapping
        public void generate(HttpServletResponse response){
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            String code = drawImg(output);
             
            Subject currentUser = SecurityUtils.getSubject();  
            Session session = currentUser.getSession();
            session.setAttribute(Const.SESSION_SECURITY_CODE, code);
             
            try {
                ServletOutputStream out = response.getOutputStream();
                output.writeTo(out);
                out.close();
            catch (IOException e) {
                //e.printStackTrace();
            }
        }
         
        private String drawImg(ByteArrayOutputStream output){
            String code = "";
            for(int i=0; i<4; i++){
                code += randomChar();
            }
            int width = 70;
            int height = 25;
            BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
            Font font = new Font("Times New Roman",Font.PLAIN,20);
            Graphics2D g = bi.createGraphics();
            g.setFont(font);
            Color color = new Color(66,2,82);
            g.setColor(color);
            g.setBackground(new Color(226,226,240));
            g.clearRect(0, 0, width, height);
            FontRenderContext context = g.getFontRenderContext();
            Rectangle2D bounds = font.getStringBounds(code, context);
            double x = (width - bounds.getWidth()) / 2;
            double y = (height - bounds.getHeight()) / 2;
            double ascent = bounds.getY();
            double baseY = y - ascent;
            g.drawString(code, (int)x, (int)baseY);
            g.dispose();
            try {
                ImageIO.write(bi, "jpg", output);
            catch (IOException e) {
                //e.printStackTrace();
            }
            return code;
        }
         
        private char randomChar(){
            Random r = new Random();
            String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
            return s.charAt(r.nextInt(s.length()));
        }
    }
  • 相关阅读:
    1410. Crack
    1900. Brainwashing Device
    elasticsearch 数据查查询、分词查询
    elasticsearch 数据认识 与 数据表文档 的增删改
    认识 elasticsearch ,以及 检索库 的增删改查操作
    Elasticsearch集成Ikanalyzer分词器
    node.js 安装并升级
    linux 安装 elasticsearch-head
    linux 安装kibana
    linux安装Elasticsearch详细步骤
  • 原文地址:https://www.cnblogs.com/changqijing/p/7597339.html
Copyright © 2020-2023  润新知