在windows环境下,旧版本的Rmagick安装完gem后,需要运行一个postinstall.rb来设置windows字体等。新版本的Rmagick没有这个步骤,代替是安装ImageMagick。我按照README安装成功后,在rails中使用还是出现无法读取字体的错误,忍无可忍又换了旧版本的Rmagick,没想到跟ruby的解释器版本不一致,render templage的时候出现parse error类型的错误。认真比对了下新老版本的差别,原来旧版本的Rmagick在Config目录下多了个type-windows.xml来设置windows字体,在此记录下正确的安装方法:
1.到http://rubyforge.org/frs/?group_id=12&release_id=8170,下载RMagick-1.14.1_IM-6.3.0-7-Q8.zip
2.解压后在目录执行gem install rmagick-1.14.1-win32.gem
3.最后,双击ImageMagick-6.3.0-7-Q8-windows-dll.exe安装ImageMagick
4.将ImageMagick的安装目录加进环境变量path,如果有的话就不用了
5.最后一步,将附件中的type-windows.xml拷贝进ImageMagick安装目录下的config目录,比如E:\ImageMagick-6.3.0-Q8\config,修改type.xml,原来是:
代码
<typemap>
<include file="type-ghostscript.xml" />
</typemap>
修改为:
代码
<typemap>
<include file="type-windows.xml" />
<!-- <include file="type-ghostscript.xml" /> -->
</typemap>
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(4) :
3.与rails应用的结合,和一般的验证码原理一样,将产生的随机数存储在session或者request范围内,提交的时候进行比较验证即可。比如产生图片的时候将随机字母存储在session[:code]中:
def register
session[:noisy_image] = NoisyImage.new(4) #生成一个有4字符的图片
session[:code] = session[:noisy_image].code
end
验证的时候,比较提交的type_code与session[:code]即可,为了安全性考虑,最好还是不考虑使用客户端验证。
def code_check
if params[:code]!=session[:noisy_image].code
render_text "<script>document.getElementById('r_form').code.focus();</script>验证码错误!"
else
render_text ""
end
end
controller.rb具体代码如下:
在页面显示图片,类似servlet一样直接调用Controller的action:
在register.rhtml中加入以下代码: