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

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

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

    子在川上曰

      逝者如斯夫不舍晝夜
    隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
    數據加載中……

    Rails驗證碼圖片的實現

    第一步:安裝必須的軟件

    在linux下生成圖片需要圖片處理軟件ImageMagick的Ruby語言RMagick庫支持。安裝RMagick最麻煩,我查了N多資料試了N次才安裝成功。
       1. 安裝ImageMagick:sudo apt-get install imagemagick
       2. 查看安裝結果:dpkg -l | grep magick
       3. 更新軟件包列表:sudo apt-get update
       4. 安裝圖片處理軟件包libmagick9-dev:sudo apt-get install libmagick9-dev ruby1.8-dev
       5. 安裝接口軟件包RMagick:sudo gem install rmagick
       6. 說明:如果出現問題或者錯誤請執行下面命令:sudo apt-get remove --purge libmagick9-dev
    
    在irb里require 'RMagick'。如果返回true,表示安裝成功。

    第二步:編碼

    在models目錄創建一個proof_image.rb

    require 'rubygems'
    require 'RMagick'
    class ProofImage
      include Magick
      attr_reader :text, :image
      Jiggle 
    = 15
      Wobble 
    = 15

      def initialize(len
    =4)
        chars 
    = ('a'..'z').to_a # + ('0'..'9').to_a
        text_array
    =[]
        
    1.upto(len) {text_array << chars[rand(chars.length)]}
        #background_type 
    = "granite:" #花崗巖
        #background_type 
    = "netscape:" #彩條
        #background_type 
    = "xc:#EDF7E7" #指定背景色,例:xc:red
        #background_type 
    = "null:" #純黑
        granite 
    = Magick::ImageList.new('null:')
        canvas 
    = Magick::ImageList.new
        canvas.new_image(
    32*len, 50, Magick::TextureFill.new(granite))
        gc 
    = Magick::Draw.new
        gc.font_family 
    = 'times'
        gc.pointsize 
    = 40
        cur 
    = 10

        text_array.each{
    |c|
          rand(
    10> 5 ? rot=rand(Wobble):rot= -rand(Wobble)
          rand(
    10> 5 ? weight = NormalWeight : weight = BoldWeight
          gc.annotate(canvas,
    0,0,cur,30+rand(Jiggle),c){
            self.rotation
    =rot
            self.font_weight 
    = weight
            self.fill 
    = 'green'
          }
          cur 
    += 30
        }
        @text 
    = text_array.to_s
        @image 
    = canvas.to_blob{
          self.format
    ="GIF"
        }

        #生成圖片文件
        #text.text(
    00" ")
        #text.draw(canvas)
        #canvas.write('test.gif') #圖片位于項目根目錄下。也可以使用linux中的絕對路徑如:
    /home/chengang/test.gif

      end
    end


    在一個controller里加入一個方法,方法的作用是向網頁提供圖片數據。我選擇創建一個專門的UtilController。

    class UtilController < ApplicationController

      def proof_image
        proof_image 
    = ProofImage.new
        session[:proof_text] 
    = proof_image.text
        send_data proof_image.image, :type 
    => 'image/jpeg', :disposition => 'inline'
      end

    end


    以下是在頁面中的調用代碼:

    輸入驗證碼:<%=text_field(:proof, :text, :maxlength=>4%>
    <img id="img" src="/chen/util/proof_image">
    <a href="#" onclick="changeImage();return false;">換一個驗證碼</a><br/>


    其中changeImage()是一個javascript函數,因為換圖片時必須改變<img的src,否則瀏覽器不會執行UtilController的proof_image方法,而是從緩存中取得圖片數據。

    function changeImage(){
      $(
    "img").src = "/chen/util/proof_image?tmp=" +new Date().getTime(); // Math.random();
    }


    我的環境:ubuntu 7.04 + Rails 1.2.3 +Ruby 1.8.5

    posted on 2007-08-17 19:48 陳剛 閱讀(2230) 評論(0)  編輯  收藏 所屬分類: Rails&Ruby

    主站蜘蛛池模板: 猫咪免费人成网站在线观看入口| 亚洲精品网站在线观看你懂的| 亚洲精品无播放器在线播放| 真人做人试看60分钟免费视频| 亚洲黄色免费在线观看| 色猫咪免费人成网站在线观看| 亚洲AV无码久久精品成人 | 日韩欧美亚洲中文乱码| 啦啦啦在线免费视频| 亚洲人成77777在线播放网站不卡| 人成午夜免费视频在线观看| 亚洲看片无码在线视频 | 永久免费无码网站在线观看个| 国产va免费精品观看精品 | 亚洲国产精品综合久久20| 在线观看特色大片免费视频 | 一级毛片大全免费播放下载| 伊人久久亚洲综合| 精品无码AV无码免费专区| 亚洲xxxxxx| 免费人成网站在线高清| 成人自慰女黄网站免费大全| 亚洲AV天天做在线观看| 日韩欧毛片免费视频| 精品国产亚洲一区二区三区在线观看| 免费a级毛片无码av| 花蝴蝶免费视频在线观看高清版| 亚洲综合久久1区2区3区| 日韩免费观看的一级毛片| rh男男车车的车车免费网站| 久久精品国产亚洲av麻豆色欲 | 两性色午夜免费视频| 亚洲综合综合在线| 四虎影视永久免费观看| A片在线免费观看| 亚洲av无码一区二区三区观看| 亚洲精品456播放| 亚洲免费黄色网址| 日韩免费在线中文字幕| 亚洲色图综合网站| 国产L精品国产亚洲区久久|