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 }