Servlet随机生成验证图片

来源:互联网 发布:mac相册里照片如何删除 编辑:程序博客网 时间:2024/06/04 20:13
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RandomImageServlet extends HttpServlet {private static final int HEIGHT = 35;private static final int WIDTH = 120;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();// 1.设置背景颜色setBackgroundColor(g);// 2.设置边框setBorder(g);// 3.画干扰线setLine(g);// 4.生成随机文本setRandomText((Graphics2D) g);// 5.把图形写给浏览器ImageIO.write(image, "jpg", response.getOutputStream());}private void setRandomText(Graphics2D g) {g.setColor(Color.RED);g.setFont(new Font("TimesRoman", Font.BOLD, 20));int x = 5;for (int i = 0; i < 4; i++) {Random random = new Random();// 随机生成角度,-45度到45度int degree = random.nextInt() % 45;//旋转g.rotate(degree * Math.PI / 180, x, 25);// 随机生成字母,A-Zint character = 90 - random.nextInt(26);g.drawString((char) character + "", x, 25);//旋转回来g.rotate(-degree * Math.PI / 180, x, 25);x += 30;}}private void setLine(Graphics g) {g.setColor(Color.GREEN);for (int i = 0; i < 5; i++) {Random random = new Random();g.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH), random.nextInt(HEIGHT));}}private void setBorder(Graphics g) {g.setColor(Color.BLUE);g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);}private void setBackgroundColor(Graphics g) {g.setColor(Color.WHITE);g.fillRect(0, 0, WIDTH, HEIGHT);}}

效果如下: