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

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

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

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理
        網(wǎng)上其實(shí)有一大堆這樣的資料了,我再寫(xiě)也沒(méi)多大價(jià)值,談下幾個(gè)注意點(diǎn)吧。
    1.在windows上安裝Rmagic,如果你是通過(guò)gem安裝的,
    require 'Rmagic'
    要修改為:
    require 'rubygems'
    require 
    'Rmagick'
    才能正確引入。

    2.網(wǎng)上那個(gè)例子,畫(huà)布是使用Rmagic內(nèi)置的圖像格式,Rmagic內(nèi)置的圖像格式還有:

    gradient*

    梯度,比如gradient:red-blue

    granite

    花崗石,比如: "granite:".

    logo

    logo型的圖像. 如: "logo:"后面會(huì)多顯示一個(gè)五角星^_^

    netscape

    非常漂亮的彩條。如: "netscape:"

    null*

    空白 使用方式: "null:"

    rose


    玫瑰 使用方式 : "rose:"

    xc*

    設(shè)置一個(gè)背景色,比如"xc:green"


    一個(gè)修改的例子,在rails的models下存為noisy_image.rb,在Controller就可以這樣調(diào)用NoisyImage.new(6) :


    require 'rubygems'
    require 
    'Rmagick'
    class NoisyImage
      include Magick
      attr_reader :code, :code_image
      Jiggle 
    = 15
      Wobble 
    = 15
      
      
    def initialize(len)
        chars 
    = ('a'..'z').to_a - ['a','e','i','o','u']
        code_array
    =[]
        
    1.upto(len) {code_array << chars[rand(chars.length)]}
        granite 
    = Magick::ImageList.new('xc:#EDF7E7')
        canvas 
    = Magick::ImageList.new
        canvas.new_image(
    32*len, 50, Magick::TextureFill.new(granite))
        text 
    = Magick::Draw.new
        text.font_family 
    = 'times'
        text.pointsize 
    = 40
        cur 
    = 10
        
        code_array.each{
    |c|
          rand(
    10> 5 ? rot=rand(Wobble):rot= -rand(Wobble)
          rand(
    10> 5 ? weight = NormalWeight : weight = BoldWeight
          text.annotate(canvas,0,0,cur,
    30+rand(Jiggle),c){
            self.rotation
    =rot
            self.font_weight 
    = weight
            self.fill 
    = 'green'
          }
          cur 
    += 30
        }
        @code 
    = code_array.to_s
        @code_image 
    = canvas.to_blob{
          self.format
    ="JPG" 
        }
      end
      
    end

    3.與rails應(yīng)用的結(jié)合,和一般的驗(yàn)證碼原理一樣,將產(chǎn)生的隨機(jī)數(shù)存儲(chǔ)在session或者request范圍內(nèi),提交的時(shí)候進(jìn)行比較驗(yàn)證即可。比如產(chǎn)生圖片的時(shí)候?qū)㈦S機(jī)字母存儲(chǔ)在session[:code]中:

     session[:noisy_image] = NoisyImage.new(6)

     session[:code] = session[:noisy_image].code

    驗(yàn)證的時(shí)候,比較提交的type_code與session[:code]即可,為了安全性考慮,最好還是不考慮使用客戶端驗(yàn)證。

     unless session[:code]==params[:type_code]
          flash[:notice]
    ='驗(yàn)證碼填寫(xiě)錯(cuò)誤,請(qǐng)重新注冊(cè),謝謝!'
          
    return redirect_to :action=>:new  
     end

    在頁(yè)面顯示圖片,類似servlet一樣直接調(diào)用Controller的action:

     def code_image
        image 
    = session[:noisy_image].code_image
        send_data image, :type 
    => 'image/jpeg', :disposition => 'inline'
      end

    <img height='30' src="/test/code_image">





    評(píng)論

    # re: rails實(shí)現(xiàn)驗(yàn)證碼  回復(fù)  更多評(píng)論   

    2007-08-16 16:10 by sixwings
    請(qǐng)問(wèn) 如何實(shí)現(xiàn) 換個(gè)驗(yàn)證碼 然后只更新那個(gè)圖片啊

    # re: rails實(shí)現(xiàn)驗(yàn)證碼  回復(fù)  更多評(píng)論   

    2008-07-16 16:45 by wzp2000
    granite = Magick::ImageList.new('xc:#EDF7E7')

    為什么提示我這一句:can't convert String into Integer

    樓主知道是什么原因么?

    # re: rails實(shí)現(xiàn)驗(yàn)證碼[未登錄](méi)  回復(fù)  更多評(píng)論   

    2008-07-16 17:18 by dennis
    @wzp2000
    這個(gè)文章用的RMagic可能已經(jīng)比較老版本了,最新的還是自己參考文檔吧。
    主站蜘蛛池模板: 亚洲欧洲日韩不卡| 成人免费毛片内射美女APP| 亚洲无码黄色网址| 亚洲精品无码mⅴ在线观看| 亚洲成年人免费网站| 亚洲一区综合在线播放| 99久久人妻精品免费一区| 国产亚洲真人做受在线观看| 国产福利免费视频| 亚洲精品制服丝袜四区| a级成人毛片免费视频高清| 亚洲国产另类久久久精品黑人| 国产高潮久久免费观看| 久久久久久久尹人综合网亚洲| 热久久这里是精品6免费观看| 久久精品国产精品亚洲精品| 日本免费一区二区久久人人澡| 亚洲va在线va天堂va四虎| 久久99国产综合精品免费| 亚洲一级片在线观看| 无码国产精品一区二区免费式直播 | 暖暖免费日本在线中文| 亚洲成a人片在线观看中文动漫| 日韩精品久久久久久免费| 日产亚洲一区二区三区| 久久福利资源网站免费看| 国产成人精品日本亚洲专区6| 免费无码又爽又刺激高潮| 国产亚洲精品仙踪林在线播放| 国产精品亚洲精品日韩已方| 久久精品视频亚洲| 亚洲国产成人久久笫一页| 青青青视频免费观看| 国产亚洲精品岁国产微拍精品| 在线成人爽a毛片免费软件| 亚洲深深色噜噜狠狠网站| yy6080久久亚洲精品| 国产精品免费看久久久| 亚洲欧洲精品成人久久曰| 国产偷国产偷亚洲高清日韩| 91香蕉国产线在线观看免费|