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            @Override
022            public Font getFont(String font, Font defaultValue) {
023                    return Font.decode(font);
024            }
025    
026            /**
027             * write out image object to a output stream
028             * @param image
029             * @param os
030             * @param format
031             * @throws IOException
032             */
033            public static void writeOut(BufferedImage image, OutputStream os, String format) throws IOException {
034                    ImageIO.write(image, format, os);
035                    
036            }
037    
038            /**
039             * creates a random String in given length
040             * @param length length of the string to create
041             * @return
042             */
043            public static String randomString(int length) {
044                    StringBuilder sb=new StringBuilder();
045                    for(int i=0;i<length;i++) {
046                            sb.append(chars[AbstractCaptcha.rnd(0,chars.length-1)]);
047                    }
048                    return sb.toString();
049            }
050    }