<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    import java.awt.Color; 
    import java.awt.Font; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.font.FontRenderContext; 
    import java.awt.font.TextLayout; 
    import java.awt.geom.AffineTransform; 
    import java.awt.image.BufferedImage; 
    import java.io.IOException; 
    import java.text.AttributedString; 
    import java.util.Random; 

    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    import com.sun.image.codec.jpeg.JPEGCodec; 
    import com.sun.image.codec.jpeg.JPEGImageEncoder; 



    public class SimpleCaptcha extends HttpServlet { 
    private Random generator = new Random(); 
    private final static String SIMPLE_CAPCHA_SESSION_KEY = "SIMPLE_CAPCHA_SESSION_KEY"

    private static char[] captchars = new char[] { 'a''b''c''d''e'
       
    '2''3''4''5''6''7''8''g''f''y''n''m''n'
       
    'p''w''x' }; 

    /** 
      * 產生隨機字體 
      * 
      * 
    @return 
      
    */ 
    private Font getFont() { 
      Random random 
    = new Random(); 
      Font font[] 
    = new Font[5]; 
      font[
    0= new Font("Ravie", Font.PLAIN, 45); 
      font[
    1= new Font("Antique Olive Compact", Font.PLAIN, 45); 
      font[
    2= new Font("Forte", Font.PLAIN, 45); 
      font[
    3= new Font("Wide Latin", Font.PLAIN, 40); 
      font[
    4= new Font("Gill Sans Ultra Bold", Font.PLAIN, 45); 
      
    return font[random.nextInt(5)]; 


    /** 
      * 隨機產生定義的顏色 
      * 
      * 
    @return 
      
    */ 
    private Color getRandColor() { 
      Random random 
    = new Random(); 
      Color color[] 
    = new Color[10]; 
      color[
    0= new Color(3215825); 
      color[
    1= new Color(2184219); 
      color[
    2= new Color(3175208); 
      
    return color[random.nextInt(3)]; 


    /** 
      * 
    @see javax.servlet.http.HttpServlet#void 
      *      (javax.servlet.http.HttpServletRequest, 
      *      javax.servlet.http.HttpServletResponse) 
      
    */ 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
       
    throws ServletException, IOException { 

      
    int ImageWidth = 200
      
    int ImageHeight = 100

      
    int car = captchars.length - 1
      
    /** 
       * 產生隨機字符串 
       
    */ 
      String test 
    = ""
      
    for (int i = 0; i < 4; i++) { 
       test 
    += captchars[generator.nextInt(car) + 1]; 
      } 
      
    /** 
       * 放放Session 
       
    */ 
      req.getSession().setAttribute(SimpleCaptcha.SIMPLE_CAPCHA_SESSION_KEY, 
        test); 
      
    /** 
       * 得到輸出流 
       
    */ 
      JPEGImageEncoder encoder 
    = JPEGCodec.createJPEGEncoder(resp 
        .getOutputStream()); 

      BufferedImage bi 
    = new BufferedImage(ImageWidth + 10, ImageHeight, 
        BufferedImage.TYPE_BYTE_INDEXED); 

      Graphics2D graphics 
    = bi.createGraphics(); 

      
    /** 
       * 設置背景色 
       
    */ 
      graphics.setColor(Color.white); 
      
      graphics.fillRect(
    00, bi.getWidth(), bi.getHeight()); 

      graphics.setColor(Color.black); 
      AttributedString attstr 
    = new AttributedString(test); 

      TextLayout textTl 
    = new TextLayout(test, new Font("Courier", Font.BOLD, 
        
    70), new FontRenderContext(nulltruefalse)); 
      AffineTransform textAt 
    = graphics.getTransform(); 
      graphics.setFont(
    new Font("Courier", Font.BOLD,70)); 
      graphics.setColor(
    this.getRandColor()); 
      graphics.drawString(test, 
    10,70); 
    //  textTl.draw(graphics, 4, 60); 
      int w = bi.getWidth(); 
      
    int h = bi.getHeight(); 
      shear(graphics, w, h, Color.white); 
      
    // this.drawThickLine(graphics, 0, generator.nextInt(ImageHeight) + 1, 
      
    // ImageWidth, generator.nextInt(ImageHeight) + 1, 4, Color.BLACK); 

      resp.setContentType(
    "image/jpg"); 

      encoder.encode(bi); 



    private void shear(Graphics g, int w1, int h1, Color color) { 

      shearX(g, w1, h1, color); 
      shearY(g, w1, h1, color); 


    public void shearX(Graphics g, int w1, int h1, Color color) { 

      
    int period = generator.nextInt(2); 

      
    boolean borderGap = true
      
    int frames = 1
      
    int phase = generator.nextInt(2); 

      
    for (int i = 0; i < h1; i++) { 
       
    double d = (double) (period >> 1
         
    * Math.sin((double) i / (double) period 
           
    + (6.2831853071795862D * (double) phase) 
           
    / (double) frames); 
       g.copyArea(
    0, i, w1, 1, (int) d, 0); 
       
    if (borderGap) { 
        g.setColor(color); 
        g.drawLine((
    int) d, i, 0, i); 
        g.drawLine((
    int) d + w1, i, w1, i); 
       } 
      } 



    public void shearY(Graphics g, int w1, int h1, Color color) { 

      
    int period = generator.nextInt(40+ 10// 50; 

      
    boolean borderGap = true
      
    int frames = 20
      
    int phase = 7
      
    for (int i = 0; i < w1; i++) { 
       
    double d = (double) (period >> 1
         
    * Math.sin((double) i / (double) period 
           
    + (6.2831853071795862D * (double) phase) 
           
    / (double) frames); 
       g.copyArea(i, 
    01, h1, 0, (int) d); 
       
    if (borderGap) { 
        g.setColor(color); 
        g.drawLine(i, (
    int) d, i, 0); 
        g.drawLine(i, (
    int) d + h1, i, h1); 
       } 

      } 



    private void drawThickLine(Graphics g, int x1, int y1, int x2, int y2, 
       
    int thickness, Color c) { 

      
    // The thick line is in fact a filled polygon 
      g.setColor(c); 
      
    int dX = x2 - x1; 
      
    int dY = y2 - y1; 
      
    // line length 
      double lineLength = Math.sqrt(dX * dX + dY * dY); 

      
    double scale = (double) (thickness) / (2 * lineLength); 

      
    // The x and y increments from an endpoint needed to create a 
      
    // rectangle 
      double ddx = -scale * (double) dY; 
      
    double ddy = scale * (double) dX; 
      ddx 
    += (ddx > 0? 0.5 : -0.5
      ddy 
    += (ddy > 0? 0.5 : -0.5
      
    int dx = (int) ddx; 
      
    int dy = (int) ddy; 

      
    // Now we can compute the corner points 
      int xPoints[] = new int[4]; 
      
    int yPoints[] = new int[4]; 

      xPoints[
    0= x1 + dx; 
      yPoints[
    0= y1 + dy; 
      xPoints[
    1= x1 - dx; 
      yPoints[
    1= y1 - dy; 
      xPoints[
    2= x2 - dx; 
      yPoints[
    2= y2 - dy; 
      xPoints[
    3= x2 + dx; 
      yPoints[
    3= y2 + dy; 

      g.fillPolygon(xPoints, yPoints, 
    4); 





    posted on 2009-09-01 14:43 SIMONE 閱讀(1532) 評論(1)  編輯  收藏

    FeedBack:
    # re: java輸出扭曲驗證碼
    2010-08-31 23:57 | 游客
    全是這樣的  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成人免费视频试看120秒| 免费国产人做人视频在线观看| 亚洲精品熟女国产| 99久久99久久精品免费看蜜桃| 亚洲国产精品成人综合色在线| 亚洲裸男gv网站| 91成人免费观看| 国产成人人综合亚洲欧美丁香花| 亚洲熟妇av一区二区三区漫画| h视频在线免费看| 国产精品亚洲天堂| 麻豆亚洲AV永久无码精品久久 | 亚洲天堂中文字幕在线观看| 日韩黄色免费观看| 国产免费AV片在线观看| 亚洲综合久久精品无码色欲| 亚洲熟女少妇一区二区| 我要看免费的毛片| 日韩精品无码免费专区午夜 | 亚洲精品无码鲁网中文电影| 成人免费黄色网址| 精品无码国产污污污免费网站国产| 亚洲免费视频网址| 亚洲午夜未满十八勿入网站2| 成全高清视频免费观看| 成人久久免费网站| 理论秋霞在线看免费| 亚洲ts人妖网站| 亚洲精品成人片在线观看精品字幕| 在线成人a毛片免费播放| 亚洲国产精品免费视频| 又黄又大的激情视频在线观看免费视频社区在线 | 久久精品免费全国观看国产| 成人免费av一区二区三区| 亚洲国产成人久久综合| 亚洲男人天堂影院| 亚洲国产精品无码久久一区二区| 尤物永久免费AV无码网站| 国产成人精品免费视频大全麻豆| 久久免费高清视频| 久久久WWW成人免费精品|