require'Rmagic'
要修改为:
require'rubygems'
require'Rmagick'
才能正确引入
2.网上那个例子画布是使用Rmagic内置图像格式Rmagic内置图像格式还有:
gradient*梯度比如gradient:red-blue
granite
花岗石比如: "granite:".
logo
logo型图像. 如: "logo:"后面会多显示个 5角星^_^
netscape
非常漂亮彩条如: "netscape:"
null*
空白 使用方式: "null:"
rose
玫瑰 使用方式 : "rose:"
xc*
设置个背景色比如"xc:green"
个修改例子在railsmodels下存为noisy_image.rb,在Controller就可以这样NoisyImage.(6) :
require'rubygems'
require'Rmagick'
NoisyImage
Magick
attr_reader:code,:code_image
Jiggle=15
Wobble=15
definitialize(len)
chars=('a'..'z').to_a-['a','e','i','o','u']
code_.gif' />=
1.upto(len){code_.gif' /><<chars[rand(chars.length)]}
granite=Magick::ImageList.('xc:#EDF7E7')
canvas=Magick::ImageList.
canvas._image(32*len,50,Magick::TextureFill.(granite))
text=Magick::Draw.
text.font_family='times'
text.posize=40
cur=10
code_.gif' />.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'
}
cur30
}
@code=code_.gif' />.to_s
@code_image=canvas.to_blob{
self.format="JPG"
}
end
end
3.和rails应用结合和般验证码原理样将产生随机数存储在session或者request范围内提交时候进行比较验证即可比如产生图片时候将随机字母存储在session[:code]中:
session[:noisy_image]=NoisyImage.(6)
session[:code]=session[:noisy_image].code
验证时候比较提交type_code和session[:code]即可为了安全性考虑,最好还是不考虑使用客户端验证
unlesssession[:code]params[:type_code]
flash[:notice]='验证码填写请重新注册谢谢!'
redirect_to:action=>:
end
在页面显示图片类似servlet样直接Controlleraction:
defcode_image
image=session[:noisy_image].code_image
send_dataimage,:type=>'image/jpeg',:disposition=>'inline'
end
<imgheight='30'src="/test/code_image">
最新评论