001    package railo.runtime.img;
002    
003    import java.awt.Color;
004    import java.awt.Font;
005    import java.awt.image.BufferedImage;
006    
007    import railo.commons.img.AbstractCaptcha;
008    import railo.commons.img.CaptchaException;
009    import railo.commons.lang.font.FontUtil;
010    import railo.runtime.exp.ExpressionException;
011    import railo.runtime.img.filter.MarbleFilter;
012    
013    public class MarpleCaptcha extends AbstractCaptcha {
014    
015            public static final int DIFFICULTY_LOW=0;
016            public static final int DIFFICULTY_MEDIUM=1;
017            public static final int DIFFICULTY_HIGH=2;
018    
019            public BufferedImage generate(String text,int width, int height, String[] fonts, boolean useAntiAlias, Color fontColor,int fontSize, int difficulty) throws CaptchaException {
020                    MarbleFilter mf = new MarbleFilter();
021                    try {
022                            mf.setEdgeAction("WRAP");
023                    } catch (ExpressionException e1) {}
024                    mf.setAmount(0.1F);
025                    BufferedImage src=super.generate(text, width, height, fonts, useAntiAlias, fontColor, fontSize, difficulty);
026                    
027                    if(difficulty==DIFFICULTY_LOW) mf.setTurbulence(0.0f);
028                    else if(difficulty==DIFFICULTY_MEDIUM) mf.setTurbulence(0.10f);
029                    else mf.setTurbulence(0.2f);
030                    
031                    try {
032                            mf.setInterpolation("NEAREST_NEIGHBOUR");
033                    } catch (ExpressionException e) {}
034                    
035                    BufferedImage dst = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
036                    mf.filter(src, dst);
037                    return dst;
038            }
039            
040            public Font getFont(String font, Font defaultValue) {
041                    return FontUtil.getFont(font,defaultValue);
042            }
043    }