Sha256: 7976e55afd3b9e681927747c5c4b398c6940fec90c082a858f354450453abbf2

Contents?: true

Size: 1.94 KB

Versions: 8

Compression:

Stored size: 1.94 KB

Contents

module EasyCaptcha
  # captcha generation class
  class Captcha
    # code for captcha generation
    attr_reader :code
    # blob of generated captcha image
    attr_reader :image
    
    # generate captcha by code
    def initialize(code)
      @code = code
      generate_captcha
    end
    
    def inspect #:nodoc:
      "<EasyCaptcha::Captcha @code=#{code}>"
    end

    private
    
    def generate_captcha #:nodoc:
      canvas = Magick::Image.new(EasyCaptcha.image_width, EasyCaptcha.image_height) do |variable|
        self.background_color = EasyCaptcha.image_background_color unless EasyCaptcha.image_background_color.nil?
      end

      # Render the text in the image
      canvas.annotate(Magick::Draw.new, 0,0,0,0, code) {
        self.gravity = Magick::CenterGravity
        self.font_family = EasyCaptcha.font_family
        self.font_weight = Magick::LighterWeight
        self.fill = EasyCaptcha.font_fill_color
        if EasyCaptcha.font_stroke.to_i > 0
          self.stroke = EasyCaptcha.font_stroke_color
          self.stroke_width = EasyCaptcha.font_stroke
        end
        self.pointsize = EasyCaptcha.font_size
      }

      # Blur
      canvas = canvas.blur_image(EasyCaptcha.blur_radius, EasyCaptcha.blur_sigma) if EasyCaptcha.blur?
      
      # Wave
      w = EasyCaptcha.wave_length
      a = EasyCaptcha.wave_amplitude
      canvas = canvas.wave(rand(a.last - a.first) + a.first, rand(w.last - w.first) + w.first) if EasyCaptcha.wave?
      
      # Sketch
      canvas = canvas.sketch(EasyCaptcha.sketch_radius, EasyCaptcha.sketch_sigma, rand(180)) if EasyCaptcha.sketch?
      
      # Implode
      canvas = canvas.implode(EasyCaptcha.implode.to_f) if EasyCaptcha.implode.is_a? Float
      
      # Crop image because to big after waveing
      canvas = canvas.crop(Magick::CenterGravity, EasyCaptcha.image_width, EasyCaptcha.image_height)
      
      @image = canvas.to_blob { self.format = 'PNG' }
      canvas.destroy!
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
easy_captcha-0.1.9 lib/easy_captcha/captcha.rb
easy_captcha-0.1.8 lib/easy_captcha/captcha.rb
easy_captcha-0.1.7 lib/easy_captcha/captcha.rb
easy_captcha-0.1.6 lib/easy_captcha/captcha.rb
easy_captcha-0.1.5 lib/easy_captcha/captcha.rb
easy_captcha-0.1.4 lib/easy_captcha/captcha.rb
easy_captcha-0.1.3 lib/easy_captcha/captcha.rb
easy_captcha-0.1.2 lib/easy_captcha/captcha.rb