net.shopxx.CaptchaEngine.java Source code

Java tutorial

Introduction

Here is the source code for net.shopxx.CaptchaEngine.java

Source

/*
 * Copyright 2005-2015 shopxx.net. All rights reserved.
 * Support: http://3936242.01p.com/
 * License: http://3936242.01p.com/license
 */
package net.shopxx;

import java.awt.Color;
import java.awt.Font;

import javax.servlet.ServletContext;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.web.context.ServletContextAware;

import com.octo.captcha.CaptchaFactory;
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.RandomTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.engine.image.ImageCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;

@Component("captchaEngine")
public class CaptchaEngine extends ImageCaptchaEngine implements ServletContextAware, InitializingBean {

    private ServletContext servletContext;

    @Value("${captcha.imageWidth}")
    private int imageWidth;

    @Value("${captcha.imageHeight}")
    private int imageHeight;

    @Value("${captcha.minFontSize}")
    private int minFontSize;

    @Value("${captcha.maxFontSize}")
    private int maxFontSize;

    @Value("${captcha.minWordLength}")
    private int minWordLength;

    @Value("${captcha.maxWordLength}")
    private int maxWordLength;

    @Value("${captcha.charString}")
    private String charString;

    @Value("${captcha.background_image_path}")
    private String backgroundImagePath;

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    public void afterPropertiesSet() throws Exception {
        Assert.state(imageWidth > 0);
        Assert.state(imageHeight > 0);
        Assert.state(minFontSize > 0);
        Assert.state(maxFontSize > 0);
        Assert.state(minWordLength > 0);
        Assert.state(maxWordLength > 0);
        Assert.hasText(charString);

        Font[] fonts = new Font[] { new Font("Arial", Font.BOLD, maxFontSize),
                new Font("Bell", Font.BOLD, maxFontSize), new Font("Credit", Font.BOLD, maxFontSize),
                new Font("Impact", Font.BOLD, maxFontSize) };
        FontGenerator fontGenerator = new RandomFontGenerator(minFontSize, maxFontSize, fonts);
        BackgroundGenerator backgroundGenerator = StringUtils.isNotEmpty(backgroundImagePath)
                ? new FileReaderRandomBackgroundGenerator(imageWidth, imageHeight,
                        servletContext.getRealPath(backgroundImagePath))
                : new FunkyBackgroundGenerator(imageWidth, imageHeight);
        TextPaster textPaster = new RandomTextPaster(minWordLength, maxWordLength, Color.WHITE);
        CaptchaFactory[] captchaFactories = new CaptchaFactory[] {
                new GimpyFactory(new RandomWordGenerator(charString),
                        new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster)) };
        super.setFactories(captchaFactories);
    }

}