Edzy_Java

            BlogJava :: 首頁 ::  ::  ::  :: 管理 ::
            58 隨筆 :: 12 文章 :: 11 評論 :: 0 Trackbacks

          生成方法(一)
          // 在內存中創建圖象
          int width=55, height=20;
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

          // 獲取圖形上下文
          Graphics g = image.getGraphics();

          // 設定背景色
          g.setColor(new Color(0xECECEC));
          g.fillRect(0, 0, width, height);

          //畫邊框
          g.setColor(Color.black);
          g.drawRect(0,0,width-1,height-1);
          Random random = new Random();
          // 取隨機產生的認證碼(4位數字)
          String rand = "";
          rand += random.nextInt(9);
          rand += random.nextInt(9);
          rand += random.nextInt(9);
          rand += random.nextInt(9);

          // 將認證碼存入SESSION
          session.setAttribute("rand",rand);

          //將認證碼顯示到圖象中,并在12到18象素之間隨機設定字體的大小
          g.setColor(Color.black);
          random.setSeed(new Date().getTime());
          g.setFont(new Font("Atlantic Inline",Font.PLAIN,(12 + random.nextInt(6))));
          String Str = rand.substring(0,1);
          g.drawString(Str,8,17);

          g.setFont(new Font("Atlantic Inline",Font.PLAIN,(12 + random.nextInt(6))));
          Str = rand.substring(1,2);
          g.drawString(Str,20,15);

          g.setFont(new Font("Atlantic Inline",Font.PLAIN,(12 + random.nextInt(6))));
          Str = rand.substring(2,3);
          g.drawString(Str,35,18);

          g.setFont(new Font("Atlantic Inline",Font.PLAIN,(12 + random.nextInt(6))));
          Str = rand.substring(3,4);
          g.drawString(Str,45,15);

          // 隨機產生88個干擾點,使圖象中的認證碼不易被其它程序探測到
          for (int i=0;i<30;i++)
          {
          ??? int x = random.nextInt(width);
          ??? int y = random.nextInt(height);
          ??? g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
          ??? g.drawOval(x,y,0,1);
          }

          // 圖象生效
          g.dispose();

          // 輸出圖象到頁面
          ImageIO.write(image, "JPEG", response.getOutputStream());

          生成方法(二)
          <%@ page contentType="image/jpeg" import="java.awt.*,
          java.awt.image.*,java.util.*,javax.imageio.*" %>
          <%!
          Color getRandColor(int fc,int bc){//給定范圍獲得隨機顏色
          Random random = new Random();
          if(fc>255) fc=255;
          if(bc>255) bc=255;
          int r=fc+random.nextInt(bc-fc);
          int g=fc+random.nextInt(bc-fc);
          int b=fc+random.nextInt(bc-fc);
          return new Color(r,g,b);
          }
          %>
          <%

          int randomLen=4;
          try{
          randomLen=Integer.parseInt(request.getParameter("param"));
          }
          catch(Exception e){
          ? e.printStackTrace();
          }

          //設置頁面不緩存
          response.setHeader("Pragma","No-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires", 0);

          // 在內存中創建圖象
          int width=13*randomLen+8, height=20;
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

          // 獲取圖形上下文
          Graphics g = image.getGraphics();

          //生成隨機類
          Random random = new Random();

          // 設定背景色
          g.setColor(getRandColor(200,250));
          g.fillRect(0, 0, width, height);

          //設定字體
          g.setFont(new Font("Times New Roman",Font.PLAIN,18));

          //畫邊框
          //g.setColor(new Color());
          //g.drawRect(0,0,width-1,height-1);

          // 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
          g.setColor(getRandColor(160,200));
          for (int i=0;i<30*randomLen;i++)
          {
          int x = random.nextInt(width);
          int y = random.nextInt(height);
          int xl = random.nextInt(12);
          int yl = random.nextInt(12);
          g.drawLine(x,y,x+xl,y+yl);
          }

          // 取隨機產生的認證碼(4位數字)
          String sRand="";
          for (int i=0;i<randomLen;i++){
          String rand=String.valueOf(random.nextInt(10));
          sRand+=rand;
          // 將認證碼顯示到圖象中
          g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
          //調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
          g.drawString(rand,13*i+6,16);
          }

          // 將認證碼存入SESSION
          session.setAttribute("validcode",sRand);

          // 圖象生效
          g.dispose();

          // 輸出圖象到頁面
          ImageIO.write(image, "JPEG", response.getOutputStream());
          %>

          posted on 2006-11-15 17:10 lbfeng 閱讀(286) 評論(0)  編輯  收藏 所屬分類: JSP&Servlet技術
          主站蜘蛛池模板: 南昌县| 牡丹江市| 那坡县| 大荔县| 丰台区| 房产| 灵寿县| 子洲县| 汶川县| 沭阳县| 手机| 蕉岭县| 阿拉善左旗| 灌云县| 承德县| 商丘市| 顺平县| 灵宝市| 寻甸| 临江市| 耒阳市| 武穴市| 麦盖提县| 瑞昌市| 娄底市| 和静县| 滁州市| 崇阳县| 卢氏县| 三门县| 南漳县| 莱西市| 浦县| 湘潭县| 云安县| 德州市| 河北省| 新津县| 东平县| 阜南县| 渝中区|