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()));
        }
    }
  • 相关阅读:
    bzoj1618 / P2918 [USACO08NOV]买干草Buying Hay(完全背包)
    bzoj1617 / P2904 [USACO08MAR]跨河River Crossing
    bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
    bzoj1613 / P1353 [USACO08JAN]跑步Running
    bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)
    bzoj1611 / P2895 [USACO08FEB]流星雨Meteor Shower
    bzoj1610 / P2665 [USACO08FEB]连线游戏Game of Lines
    bzoj1609 / P2896 [USACO08FEB]一起吃饭Eating Together(最长不降子序列)
    bzoj1606 / P2925 [USACO08DEC]干草出售Hay For Sale(01背包)
    [bzoj1041][HAOI2008]圆上的整点
  • 原文地址:https://www.cnblogs.com/changqijing/p/7597339.html
Copyright © 2011-2022 走看看