zoukankan      html  css  js  c++  java
  • 用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()));
        }
    }
  • 相关阅读:
    八步详解Hibernate的搭建及使用
    Hibernate的介绍
    javascript的优缺点和内置对象
    过滤器有哪些作用?
    JSP中动态INCLUDE与静态INCLUDE的区别?
    jsp的四种范围?
    jsp有哪些动作作用分别是什么?
    介绍在JSP中如何使用JavaBeans?
    jsp有哪些内置对象作用分别是什么 分别有什么方法?
    request.getAttribute() 和 request.getParameter() 有何区别?
  • 原文地址:https://www.cnblogs.com/changqijing/p/7597339.html
Copyright © 2011-2022 走看看