get Captcha - Java 2D Graphics

Java examples for 2D Graphics:Image Captcha

Description

get Captcha

Demo Code


//package com.java2s;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;

public class Main {
    public static String FONT_FAMILY = "Arial Black";
    public static Integer FONT_SIZE = 16;

    public static String getCaptcha(int width, int height, int num,
            OutputStream out) {/*from  w  w w. ja  v  a2s. c om*/
        // 
        width = width > 0  width : 60;
        height = height > 0  height : 18;
        // 
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Font font = new Font(FONT_FAMILY, Font.PLAIN, FONT_SIZE);
        // 
        Random random = new Random();
        Graphics g = image.getGraphics();
        g.setColor(getRandColor(200, 250));
        g.fillRect(1, 1, width - 1, height - 1);
        g.setColor(new Color(102, 102, 103));
        g.drawRect(0, 0, width - 1, height - 1);
        g.setFont(font);
        // 
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 155; i++) {
            int x = random.nextInt(width - 1);
            int y = random.nextInt(height - 1);
            int x1 = random.nextInt(6) + 1;
            int y1 = random.nextInt(12) + 1;
            g.drawLine(x, y, x + x1, y + y1);
        }
        // 
        String sRand = "";
        for (int i = 0; i < num; i++) {
            // 
            String tmp = getRandomChar();
            sRand += tmp;
            // 
            g.setColor(new Color(20 + random.nextInt(110), 20 + random
                    .nextInt(110), 20 + random.nextInt(110)));
            g.drawString(tmp, FONT_SIZE * i + 5, FONT_SIZE + 5);
        }
        g.dispose();
        try {
            ImageIO.write(image, "JPEG", out);
            out.close();
        } catch (IOException e) {
            sRand = null;
            e.printStackTrace();
        }
        return sRand;
    }

    public static Color getRandColor(int fc, int bc) {
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);

        return new Color(r, g, b);
    }

    public static String getRandomChar() {
        int rand = (int) Math.round(Math.random() * 2);
        long itmp = 0;
        char ctmp = '\u0000';
        // rand
        switch (rand) {
        // 
        case 1:
            itmp = Math.round(Math.random() * 25 + 65);
            ctmp = (char) itmp;
            return String.valueOf(ctmp);
            // 
        case 2:
            itmp = Math.round(Math.random() * 25 + 97);
            ctmp = (char) itmp;
            return String.valueOf(ctmp);
            // 
        default:
            itmp = Math.round(Math.random() * 9);
            return String.valueOf(itmp);
        }

    }
}

Related Tutorials