Java使用 BufferedImage生成验证码图片简单使用Java生成验证码 使用Java生成验证码图片 java生成验证码图片
1、工具类
import org.apache.xmlbeans.impl.util.Base64;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.UUID;public class CaptchaGenerator {private static Logger log = LoggerFactory.getLogger(CaptchaGenerator.class);private static final int WIDTH = 100;private static final int HEIGHT = 35;private static final String CHARACTERS = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";private static Color getColor(Random random) {return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));}public static void generate(HttpServletRequest request, HttpServletResponse response) throws Exception {try {BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(Color.PINK);g.fillRect(0,0,WIDTH,HEIGHT);Random random = new Random();StringBuilder captchaText = new StringBuilder();for (int i = 0; i < 4; ++i) {char c = CHARACTERS.charAt(random.nextInt(CHARACTERS.length()));captchaText.append(c);Font font = new Font("Arial", Font.BOLD, 20);Color color = getColor(random);g.setFont(font);g.setColor(color);g.drawString(Character.toString(c), 20 * i + 10, 20);}HttpSession session = request.getSession();session.removeAttribute("captcha");session.setAttribute("captcha",captchaText.toString());log.info("==== CaptchaGenerator session id==========:{}",session.getId());g.dispose();log.info("====generate Captcha============" + captchaText);log.info("====generate Captcha sesstion captcha============" + session.getAttribute("captcha"));ServletOutputStream responseOutputStream =response.getOutputStream();ImageIO.write(image, "png", responseOutputStream);responseOutputStream.flush();responseOutputStream.close();} catch (Exception e) {e.printStackTrace();throw new Exception(e.getMessage());}}}
2、调用
@RequestMapping(value="/loginCaptcha",method=RequestMethod.GET)public void loginCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {CaptchaGenerator.generate(request,response);}