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

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

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

    千里馬

    天馬行空

    生成圖形的縮略圖和動(dòng)態(tài)的圖形的驗(yàn)證碼

    1,縮略圖是當(dāng)今web站點(diǎn),尤其是提供圖片信息瀏覽功能的網(wǎng)站,都會(huì)使用到的技術(shù),它能夠有效的提高用戶(hù)瀏覽信息的速度。
    2,縮略圖與原圖的本質(zhì)區(qū)別是文件大小驟減,對(duì)于瀏覽型的圖片來(lái)說(shuō),縮略圖就是在不失去原有的瀏覽效果的前提下提高瀏覽速度的作用。
    3,      
        ... 
              response.setContentType("image/jpeg");
               FileInputStream fin=new FileInputStream("E:\\Users\\lizi\\Workspaces\\MyEclipse 8.5\\JSPTest\\src\\javal.jpg");
               Image src=ImageIO.read(fin);
               int h=60;
               int w=60;
               BufferedImage tag=new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
               tag.getGraphics().drawImage(src, 0, 0, w, h, null);
               ImageIO.write(tag, "JPEG", response.getOutputStream());
        ...
    4,圖形驗(yàn)證碼是為了防止惡意注冊(cè)和登錄而設(shè)計(jì)的。有些惡意程序(如注冊(cè)機(jī))可以進(jìn)行不斷的注冊(cè)和登錄嘗試。如果沒(méi)有圖形驗(yàn)證碼,web服務(wù)器會(huì)不堪重負(fù),有時(shí)還會(huì)短時(shí)間內(nèi)占滿(mǎn)服務(wù)器的磁盤(pán)空間。圖形驗(yàn)證碼可以很好的解決這類(lèi)問(wèn)題,因?yàn)殡S機(jī)的驗(yàn)證碼是以圖形的方式呈現(xiàn)給用戶(hù)的,還包含了一些干擾點(diǎn),只能肉眼才能看清楚驗(yàn)證碼的值。
    5,圖形驗(yàn)證碼的原理其實(shí)很簡(jiǎn)單,在用戶(hù)注冊(cè)或登錄前,生成一個(gè)隨機(jī)的驗(yàn)證碼并保存在會(huì)話(huà)session中,用戶(hù)提交請(qǐng)求以后,首先驗(yàn)證輸入的驗(yàn)證碼是否正確,如果錯(cuò)誤則直接返回。所以圖形驗(yàn)證碼的核心在于如何使用java的2D圖形編程API來(lái)繪制生成的驗(yàn)證碼和干擾點(diǎn),然后再把生成的圖片對(duì)象寫(xiě)到客戶(hù)端。
    以下是使用動(dòng)態(tài)圖形驗(yàn)證碼的基本步驟:
       (1)創(chuàng)建一個(gè)圖形對(duì)象。一般還要初始化背景顏色和邊框。
       int width=60,height=20;//定義寬度和高度
        //在內(nèi)存中創(chuàng)建圖像
       BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
       Graphics g=image.getGraphics();//獲取圖形上下文
       g.setClor(new Color(0xDCDCDC));
       g.fillRect(0,0,width,height);
       g.setColr(Color.black);
       g.drawRect(0,0,width-1,height-1);
       (2)產(chǎn)生隨機(jī)數(shù)字。如果位數(shù)不足還需補(bǔ)零,以下是生成4位長(zhǎng)度的隨機(jī)數(shù)字示例代碼:
     //取隨機(jī)產(chǎn)生的驗(yàn)證碼(4位)
     
        //設(shè)置返回內(nèi)容的MIME類(lèi)型,這里是jpeg圖片。
      response.setContentType("image/jpeg");
      //為了保證每次的驗(yàn)證碼每次訪(fǎng)問(wèn)都是新的,需要指定驗(yàn)證碼圖片不從瀏覽器緩存里獲得。
      response.setHeader("Cache-Control","no-cache,nust-revalidate");
      response.setHeader("Pragma", "no-cache");
      response.setHeader("Last-Modified", new  Date().toString());
      response.setDateHeader("Expires",0);
      //在內(nèi)存中創(chuàng)建圖像。
      int width=60,height=20;
      BufferedImage image=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
      Graphics g=image.getGraphics();
      //設(shè)定背景色
      g.setColor(new Color(0xDCDCDC));
      g.fillRect(0, 0, width, height);
      //畫(huà)邊框
      g.setColor(Color.black);
      g.drawRect(0, 0, width-1, height-1);
      //隨機(jī)產(chǎn)生的驗(yàn)證碼(4位數(shù)),小于4位的的前面補(bǔ)零。
      Random r=new Random();
      int rst=0;
      while((rst=r.nextInt(10000))<0){
       
      }
      String rand=rst+"";
      switch (rand.length()) {
      case 1:
       rand="000"+rand;
       break;
      case 2:
       rand="00"+rand;
       break;
      case 3:
       rand="0"+rand;
       break;
      default:
       rand=rand.substring(0, 4);
       break;
      }
      //將驗(yàn)證碼存入session
      request.getSession().setAttribute("rand",rand);
         // 將驗(yàn)證碼顯示到圖像中
      g.setColor(Color.red);
      g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
      g.drawString(rand.charAt(0)+"",8 ,17);
      g.drawString(rand.charAt(1)+"", 20, 15);
      g.drawString(rand.charAt(2)+"", 35,18 );
      g.drawString(rand.charAt(3)+"",45, 15);
      //隨機(jī)產(chǎn)生50個(gè)干擾點(diǎn),使圖像中的驗(yàn)證碼不已被其他程序探測(cè)到
      Random random=new Random();
      for (int i = 0; i < 1500; i++) {
       int x=random.nextInt(width);
       int y=random.nextInt(width);
       g.drawOval(x, y, 0, 0);
      }
      g.dispose();//圖形生效
      //輸出圖形到頁(yè)面
      ImageIO.write(image, "JPEG", response.getOutputStream());

    posted on 2012-05-30 18:32 Mr Lee 閱讀(544) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java技術(shù)

    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆分類(lèi)

    隨筆檔案

    文章檔案

    (hibernate)http://www.tkk7.com/dyllove98/archive/2012/05/12/377959.html

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产精品嫩草影院免费| 日本最新免费不卡二区在线| 亚洲s色大片在线观看| 99精品免费视频| 亚洲国产精品成人精品无码区| 国产在线观看免费视频播放器| 精品亚洲456在线播放| 国产成人A在线观看视频免费| 亚洲粉嫩美白在线| 国产精品自在自线免费观看| 黄页网站在线观看免费| 国产亚洲午夜高清国产拍精品| 夜夜爽妓女8888视频免费观看| 国产成人高清亚洲| 国产成人精品日本亚洲网址| 57pao国产成永久免费视频| 亚洲人成网网址在线看| 国产麻豆免费观看91| 成人午夜影视全部免费看| 国内精品久久久久久久亚洲| 日韩精品免费视频| 亚洲女同成av人片在线观看| 水蜜桃视频在线观看免费| 亚洲综合精品香蕉久久网| 免费A级毛片无码A∨中文字幕下载| 久久精品夜色噜噜亚洲A∨| 最近免费字幕中文大全| 亚洲最大黄色网站| 浮力影院第一页小视频国产在线观看免费| 亚洲一区二区影院| 成人免费无码大片A毛片抽搐色欲| 免费夜色污私人影院网站| 亚洲日韩精品一区二区三区| 四虎免费影院ww4164h| 中文字幕亚洲色图| 久久永久免费人妻精品下载| 国产亚洲精品bv在线观看| 精品国产香蕉伊思人在线在线亚洲一区二区 | 在线观看亚洲视频| 亚洲AV日韩AV永久无码下载| 久草免费手机视频|