Popular Posts
Enable edit option in Shutter in Linux sudo apt-get install libgoo-canvas-perl Reference: How To Fix Disabled Edit Option In Shutter in Linux Mint CORS in Asp.net MVC Web API v2 Step 1. Install cors from NeGet Step 2. Enable cors in config using System; using System.Collections.Generic; using System.Linq; using ... DNS SERVER LIST Google 8.8.8.8 8.8.4.4 TWNIC 192.83.166.11 211.72.210.250 HiNet 168.95.1.1 168.95.192.1 Seednet 北區 DNS (台北, 桃園, 新竹, 宜蘭, 花蓮, 苗栗) 139....
Blog Archive
Stats
CAPTCHA
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class GraphicValidator
 */
public class GraphicValidator extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GraphicValidator() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        process(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        process(request, response);
    }

    private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("image/jpeg");
        response.setCharacterEncoding("UTF-8");

        List<String> fonts = new ArrayList<String>();
        GraphicsEnvironment.getLocalGraphicsEnvironment().preferLocaleFonts();
        String[] names = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(Locale.CHINA);
        for (String s : names) {
            char c = s.charAt(0);
            if (!(Character.isLowerCase(c) || Character.isUpperCase(c))) {
                fonts.add(s);
            }
        }
        BufferedImage image = new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphic = image.createGraphics();
        char[] numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        char[] use = new char[4];
        graphic.setColor(new Color(240, 240, 240));
        graphic.fillRect(0, 0, 200, 50);
        for (int i = 0; i < 4; i++) {
            Point p = new Point(5 + (i * ((int) (Math.random() * 10) + 40)), 40);
            int size = 0;
            int[] sizes = new int[20];
            for (int j = 0; j < 20; j++) {
                sizes[j] = 30 + j;
            }
            size = sizes[(int) (Math.random() * sizes.length)];
            int face = 0;
            if (Math.random() * 10 > 5) {
                face = Font.BOLD;
            } else {
                face = Font.ITALIC;
            }
            use[i] = numbers[(int) (Math.random() * numbers.length)];
            graphic.setPaint(new GradientPaint(p.x, p.y, new Color((int) (Math.random() * 256), 0, (int) (Math.random() * 256)), p.x, p.y - size, new Color((int) (Math.random() * 256), (int) (Math.random() * 256), (int) (Math.random() * 256))));
            graphic.setFont(new Font(fonts.get((int) (Math.random() * fonts.size())), face, size));
            graphic.drawString("" + use[i], p.x, p.y);
        }
        String output = new String(use);
        request.getSession().setAttribute("code", output);
        graphic.setPaint(null);
        for (int i = 0; i < 4; i++) {
            graphic.setColor(new Color((int) (Math.random() * 0x00FFFFFFF)));
            graphic.drawLine((int) (Math.random() * 200), (int) (Math.random() * 50), (int) (Math.random() * 200), (int) (Math.random() * 50));
        }
        Random random = new Random();
        for (int i = 0; i < 88; i++) {
            int x = random.nextInt(200);
            int y = random.nextInt(50);
            graphic.setColor(new Color((int) (Math.random() * 0x00FFFFFFF)));
            graphic.setStroke(new BasicStroke((float) (Math.random() * 3)));
            graphic.drawLine(x, y, x, y);
        }
        OutputStream ot = response.getOutputStream();
        ImageIO.write(image, "JPEG", ot);
        graphic.dispose();
        ot.close();
    }

}