最近想把一个项目从 MRI 迁移到 JRuby 下面,原来验证码用的是 easy_captcha, 没想到迁移到 JRuby 发现不能用,报‘NameError (undefined local variable or method `check_destroyed' for #Magick::Image:0x8d00dde)’,不知道大家有没有其他可以在 JRuby 下面可用验证码 GEM 可以推荐
gem 'rmagick4j'
#1 楼 @dddd1919 是这样配置的,但是就是报上面的错误。。
无力了
自已用 imagemagick 实现一个也没几行代码吧,下面是我之前写的,你试下在 jruby 下能不能用 注意参数-font 字体路径,改成你自已的,另外需要 subexec 这个 gem(如果你已经用了 mini_magick,就已经有这个 gem 了)
class Captcha def self.create(code) command = <<-CODE convert -size 100x28 -fill black -background white \ -draw 'stroke black line #{rand(20)},#{rand(28)} #{rand(30)+50},#{rand(28)}' \ -draw 'stroke black line #{rand(50)},#{rand(28)} #{rand(100)},#{rand(28)}' \ -wave #{2+rand(2)}x#{50+rand(20)} \ -font '#{Rails.root}/public/fonts/segoepr.ttf' \ -gravity Center -sketch 3x1+#{rand(180)} -pointsize 22 -implode 0.2 label:#{code} png:- CODE sub = Subexec.run(command) sub.output end end
class CaptchasController < ApplicationController def show headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate' headers['Pragma'] = 'no-cache' headers['Content-Type'] = 'image/png' session[:captcha] = random_text render text: Captcha.create(session[:captcha]) end end
#4 楼 @sallon88 谢谢。特别是字体,要注意。目前我用的是 SegoePro-Regular.ttf http://cna.mikkeliamk.fi/Public/Microsoft/Ohjeet/ITAcad/Font-Segoe%20Pro/
get '/captcha' do content_type :png session[:captcha] = Captcha.random_text Captcha.create(session[:captcha]) end
<img src="/captcha" />
https://github.com/huacnlee/rucaptcha