Use an hash for default options and merge to define params for RMagick
This commit is contained in:
parent
7b4946ba14
commit
0aa664d0f3
@ -3,6 +3,17 @@ require 'base64'
|
|||||||
|
|
||||||
module ReallySimpleCaptcha::Captcha
|
module ReallySimpleCaptcha::Captcha
|
||||||
module PlainCaptcha
|
module PlainCaptcha
|
||||||
|
DEFAULT_OPTIONS = {
|
||||||
|
width: 120,
|
||||||
|
height: 40,
|
||||||
|
wave_amplitude: 4.0,
|
||||||
|
wave_length: 60.0,
|
||||||
|
implode_amount: 0.2,
|
||||||
|
pointsize: 22,
|
||||||
|
text_fill: 'darkblue',
|
||||||
|
background_color: 'white'
|
||||||
|
}
|
||||||
|
|
||||||
include ActiveSupport::Configurable
|
include ActiveSupport::Configurable
|
||||||
config_accessor :field_name
|
config_accessor :field_name
|
||||||
|
|
||||||
@ -28,14 +39,8 @@ module ReallySimpleCaptcha::Captcha
|
|||||||
def plain_captcha_tag
|
def plain_captcha_tag
|
||||||
session[PlainCaptcha.field_name] = ReallySimpleCaptcha::Util.random_string(PlainCaptcha.text_length)
|
session[PlainCaptcha.field_name] = ReallySimpleCaptcha::Util.random_string(PlainCaptcha.text_length)
|
||||||
|
|
||||||
image = PlainCaptcha.generate_image(session[:plain_captcha], {
|
image = PlainCaptcha.generate_image(session[:plain_captcha],
|
||||||
implode_amount: PlainCaptcha.implode_amount,
|
PlainCaptcha.config.select { |k,v| DEFAULT_OPTIONS.has_key?(k) })
|
||||||
wave_amplitude: PlainCaptcha.wave_amplitude,
|
|
||||||
wave_length: PlainCaptcha.wave_length,
|
|
||||||
pointsize: PlainCaptcha.pointsize,
|
|
||||||
fill: PlainCaptcha.fill,
|
|
||||||
background_color: PlainCaptcha.background_color,
|
|
||||||
})
|
|
||||||
|
|
||||||
content_tag :div, class: 'plain_captcha' do
|
content_tag :div, class: 'plain_captcha' do
|
||||||
html = image_tag "data:image/gif;base64,#{image}", alt: "Captcha"
|
html = image_tag "data:image/gif;base64,#{image}", alt: "Captcha"
|
||||||
@ -56,31 +61,21 @@ module ReallySimpleCaptcha::Captcha
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.generate_image(captcha_text, args={})
|
def self.generate_image(captcha_text, args={})
|
||||||
width = args[:width] || 120
|
options = DEFAULT_OPTIONS.merge(args)
|
||||||
height = args[:height] || 40
|
|
||||||
|
|
||||||
wave_amplitude = args[:wave_amplitude] || 4.0
|
image = ::Magick::Image.new(options[:width], options[:height]) do
|
||||||
wave_length = args[:wave_length] || 60.0
|
self.background_color = options[:background_color]
|
||||||
implode_amount = args[:implode_amount] || 0.2
|
|
||||||
|
|
||||||
pointsize = args[:pointsize] || 22
|
|
||||||
text_fill = args[:fill] || 'darkblue'
|
|
||||||
|
|
||||||
background_color = args[:background_color] || 'white'
|
|
||||||
|
|
||||||
image = ::Magick::Image.new(width, height) do
|
|
||||||
self.background_color = background_color
|
|
||||||
end
|
end
|
||||||
|
|
||||||
text = ::Magick::Draw.new do
|
text = ::Magick::Draw.new do
|
||||||
self.pointsize = pointsize
|
self.pointsize = options[:pointsize]
|
||||||
self.gravity = ::Magick::CenterGravity
|
self.gravity = ::Magick::CenterGravity
|
||||||
self.fill = text_fill
|
self.fill = options[:text_fill]
|
||||||
end
|
end
|
||||||
|
|
||||||
text.annotate(image, 0, 0, 0, 0, captcha_text)
|
text.annotate(image, 0, 0, 0, 0, captcha_text)
|
||||||
|
|
||||||
image = image.wave(wave_amplitude, wave_length).implode(implode_amount)
|
image = image.wave(options[:wave_amplitude], options[:wave_length]).implode(options[:implode_amount])
|
||||||
|
|
||||||
Base64.strict_encode64(image.to_blob { self.format = 'GIF' })
|
Base64.strict_encode64(image.to_blob { self.format = 'GIF' })
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user