網上其實有一大堆這樣的資料了,我再寫也沒多大價值,談下幾個注意點吧。
1.在windows上安裝rmagic,如果你是通過gem安裝的,
require
'rmagic
' 要修改為:
require
'rubygems
'require
'rmagick
' 才能正確引入。
2.網上那個例子,畫布是使用rmagic內建的影象格式,rmagic內建的影象格式還有:
gradient*
梯度,比如gradient:red-blue
granite
花崗石,比如:"granite:"
.
logo
logo型的影象. 如:"logo:"
,後面會多顯示乙個五角星^_^
netscape
非常漂亮的彩條。如:"netscape:"
null*
空白 使用方式:"null:"
rose
玫瑰 使用方式 :"rose:"
xc*設定乙個背景色,比如"xc:green"
乙個修改的例子,在rails的models下存為noisy_image.rb,在controller就可以這樣呼叫noisyimage.new(6) :
require 'rubygems'
require
'rmagick
'class
noisyimage
include magick
attr_reader :code, :code_image
jiggle =15
wobble =15
definitialize(len)
chars =(
'a'..
'z').to_a -[
'a',
'e',
'i',
'o',
'u']
code_array=
1.upto(len)
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
cur
+=30
}@code
=code_array.to_s
@code_image
=canvas.to_blob
endend
3.與rails應用的結合,和一般的驗證碼原理一樣,將產生的隨機數儲存在session或者request範圍內,提交的時候進行比較驗證即可。比如產生的時候將隨機字母儲存在session[:code]中:
session[:noisy_image]
=noisyimage.new(6)
session[:code]
=session[:noisy_image].code
驗證的時候,比較提交的type_code與session[:code]即可,為了安全性考慮,最好還是不考慮使用客戶端驗證。
unless session[:code]
==params[:
type_code]
flash[:notice]='
驗證碼填寫錯誤,請重新註冊,謝謝!
'return
redirect_to :action
=>
:new
end
defcode_image
image
=session[:noisy_image].code_image
send_data image, :type
=>
'image/jpeg
', :disposition
=>
'inline
'end
<
img height='
30'src=
"/test/code_image
">
文章**莊周夢蝶 ,原文發布時間5.17
驗證碼實現
1.gd庫 2.建立影象步驟 1 建立畫布 就是在記憶體中開闢一塊臨時區域,用於儲存圖影象資訊 2 繪製影象 使用各種函式設定影象顏色,背景,填充畫筆,繪製圖形等 3 輸出圖形 以某種格式儲存到伺服器或者輸出到瀏覽器顯示給使用者。注意 直接輸出之前一定要用header 告訴瀏覽器以影象格式來處理該輸...
php驗證碼zhuc php實現驗證碼製作
php實現驗證碼製作 首先,看一張圖了解驗證碼生成的過程。1 生成驗證碼底圖 2 驗證碼內容 3 生成驗證碼 4 對比校驗 驗證碼實現的核心技術分析 a 底圖的 實現,並新增干擾元素 b 生成驗證內容 c 驗證內容儲存在服務端 d 驗證內容的校驗 下面看 實現的過程 這段 實現了產生 隨機數字,隨機...
PHP實現驗證碼
目前,不少 為了防止使用者利用機械人自動註冊 登入 灌水,都採用了驗證碼技術。所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅,裡加上一些干擾象素 防止 ocr 由使用者肉眼識別其中的驗證碼資訊,輸入表單提交 驗證,驗證成功後才能使用某項功能。我們這裡展示了如何編寫 php程式實現驗證碼功能 一...