All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.starxmind.piano.captcha.words.KaptCha Maven / Gradle / Ivy

The newest version!
package com.starxmind.piano.captcha.words;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.starxmind.bass.io.core.ImageUtils;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;

import static com.google.code.kaptcha.Constants.*;

/**
 * KaptCha
 *
 * @author pizzalord
 * @since 1.0
 */
public class KaptCha {
    private DefaultKaptcha defaultKaptcha;

    public KaptCha(KaptchaProperty kaptchaProperty) {
        defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(toConfig(kaptchaProperty));
    }

    /**
     * 生成随机文本
     *
     * @return 随机文本
     */
    public String createText() {
        return defaultKaptcha.createText();
    }

    /**
     * 使用给定文本生成base64格式的图像
     *
     * @param text   给定文本
     * @param format 图像格式
     * @return
     * @throws IOException IO异常
     */
    public String createImageAsBase64(String text, String format) throws IOException {
        BufferedImage image = defaultKaptcha.createImage(text);
        return ImageUtils.readImageAsBase64(image, format);
    }

    /**
     * 使用给定文本写到输出流中
     *
     * @param text   给定文本
     * @param format 图像格式
     * @param out    输出流
     * @throws IOException IO异常
     */
    public void createImageAsStream(String text, String format, OutputStream out) throws IOException {
        BufferedImage image = defaultKaptcha.createImage(text);
        ImageIO.write(image, format, out);
    }

    private Config toConfig(KaptchaProperty kaptchaProperty) {
        Properties properties = new Properties();
        // 图片边框
        properties.setProperty(KAPTCHA_BORDER, kaptchaProperty.isBorderEnable() ? "yes" : "no");
        // 边框颜色
        properties.setProperty(KAPTCHA_BORDER_COLOR, kaptchaProperty.getBorderColor());
        // 边框厚度
        properties.setProperty(KAPTCHA_BORDER_THICKNESS, String.valueOf(kaptchaProperty.getBorderThickness()));

        // 图片宽
        properties.setProperty(KAPTCHA_IMAGE_WIDTH, String.valueOf(kaptchaProperty.getImageWidth()));
        // 图片高
        properties.setProperty(KAPTCHA_IMAGE_HEIGHT, String.valueOf(kaptchaProperty.getImageHeight()));

        // 图片实现类
        properties.setProperty(KAPTCHA_PRODUCER_IMPL, kaptchaProperty.getProducerImpl().getName());
        // 文本实现类
        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, kaptchaProperty.getTextproducerImpl().getName());

        // 文本集合,验证码值从此集合中获取
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_STRING, kaptchaProperty.getTextproducerCharString());
        // 验证码长度
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, String.valueOf(kaptchaProperty.getTextproducerCharLength()));

        // 字体
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, kaptchaProperty.getTextproducerFontNames());
        // 字体颜色
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, kaptchaProperty.getTextproducerFontColor());
        // 文字间隔
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, String.valueOf(kaptchaProperty.getTextproducerCharSpace()));

        // 干扰实现类
        properties.setProperty(KAPTCHA_NOISE_IMPL, kaptchaProperty.getNoiseImpl().getName());
        // 干扰颜色
        properties.setProperty(KAPTCHA_NOISE_COLOR, kaptchaProperty.getNoiseColor());
        /*
         * 干扰图片样式
         * 水纹 com.google.code.kaptcha.impl.WaterRipple
         * 鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy
         * 阴影 com.google.code.kaptcha.impl.ShadowGimpy
         */
        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, kaptchaProperty.getObscurificatorImpl().getName());

        // 背景实现类
        properties.setProperty(KAPTCHA_BACKGROUND_IMPL, kaptchaProperty.getBackgroundImpl().getName());
        // 背景颜色渐变,结束颜色
        properties.setProperty(KAPTCHA_BACKGROUND_CLR_TO, kaptchaProperty.getBackgroundClrTo());

        // 文字渲染器
        properties.setProperty(KAPTCHA_WORDRENDERER_IMPL, kaptchaProperty.getWordrendererImpl().getName());
        Config config = new Config(properties);
        return config;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy