001    package railo.commons.img;
002    
003    import java.awt.Font;
004    import java.awt.image.BufferedImage;
005    import java.io.IOException;
006    import java.io.OutputStream;
007    
008    import javax.imageio.ImageIO;
009    
010    /**
011     * concrete captcha implementation
012     */
013    public final class Captcha extends AbstractCaptcha {
014            
015            private static final char[] chars=new char[]{
016                     'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
017                    ,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
018                    //,'0','1','2','3','4','5','6','7','8','9'
019            };
020    
021            /**
022             *
023             * @see railo.commons.img.AbstractCaptcha#getFont(java.lang.String, java.awt.Font)
024             */
025            public Font getFont(String font, Font defaultValue) {
026                    return Font.decode(font);
027            }
028    
029            /**
030             * write out image object to a output stream
031             * @param image
032             * @param os
033             * @param format
034             * @throws IOException
035             */
036            public static void writeOut(BufferedImage image, OutputStream os, String format) throws IOException {
037                    ImageIO.write(image, format, os);
038                    
039            }
040    
041            /**
042             * creates a random String in given length
043             * @param length length of the string to create
044             * @return
045             */
046            public static String randomString(int length) {
047                    StringBuilder sb=new StringBuilder();
048                    for(int i=0;i<length;i++) {
049                            sb.append(chars[AbstractCaptcha.rnd(0,chars.length-1)]);
050                    }
051                    return sb.toString();
052            }
053    }