花岗石,比如: "granite:".
logo型的图像. 如: "logo:",后面会多显示一个五角星^_^
非常漂亮的彩条。如: "netscape:"
空白 使用方式: "null:"
rose玫瑰 使用方式 : "rose:"
设置一个背景色,比如"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 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 end3.与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在页面显示图片,类似servlet一样直接调用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 " > 文章转自庄周梦蝶 ,原文发布时间5.17 相关资源:敏捷开发V1.0.pptx