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

时间:2023-02-03 07:42:17

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

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

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

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

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 @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()));    }}