<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

    主站蜘蛛池模板: 大学生a级毛片免费观看 | 亚洲日本VA午夜在线影院| 国产福利电影一区二区三区,免费久久久久久久精 | 国产精品久久免费| 亚洲AV无码不卡无码| 国产在线精品一区免费香蕉| 亚洲AV之男人的天堂| 亚洲av乱码一区二区三区按摩| 免费羞羞视频网站| 国产亚洲精品成人AA片| 99久久久精品免费观看国产| 久久水蜜桃亚洲av无码精品麻豆| 久久免费观看国产精品88av| 久久亚洲国产伦理| 香蕉视频亚洲一级| 免费国产成人高清视频网站| 国产精品观看在线亚洲人成网| 免费萌白酱国产一区二区| 丰满妇女做a级毛片免费观看| 亚洲国产成人久久综合野外 | 亚洲黄片手机免费观看| 国产亚洲AV夜间福利香蕉149| 国产精品综合专区中文字幕免费播放| 亚洲日韩欧洲无码av夜夜摸| 久久国产精品成人免费| 亚洲色欲www综合网| 成人免费视频软件网站| 黄页网站在线免费观看| 亚洲另类激情综合偷自拍图| 国产精品免费高清在线观看| 亚洲成人免费网址| 免费一看一级毛片全播放| 一级特黄录像免费播放肥| 亚洲精品福利在线观看| 永久免费看bbb| 香蕉视频在线免费看| 亚洲av产在线精品亚洲第一站| 国产一区二区三区在线免费观看| 精品国产污污免费网站入口| 亚洲黄网站wwwwww| 国产午夜无码视频免费网站|