class Struggle::Code

Public Class Methods

getcode(w=90, h=40, fontsize=24, wave=5.5) click to toggle source

controller def getcode

code = Code.getcode
session[:code]=code[:code]
send_data code[:img], content_type: 'image/jpeg', disposition: 'inline'

end view

<img src="/getcode">

Code.getcode(90,40,24) w宽,h高,fontsize字体大小 返回json类型

# File lib/struggle/code.rb, line 15
def self.getcode(w=90, h=40, fontsize=24, wave=5.5)
  #创建画布
  img = Magick::Image.new(w, h) {
    self.background_color = 'white'
    self.format="JPG"
  }
  text= Magick::Draw.new
  text.pointsize = fontsize
  text.kerning = -1
  filePath = File.expand_path(File.dirname(File.dirname(__FILE__)))
  fontPath = File.expand_path("struggle/font/ARIALNBI.TTF", filePath)
  text.font(fontPath)
  text.font_weight(200)
  text.fill('blue')
  # 随机文字
  code=""
  4.times { code << (97 + rand(26)).chr }
  # 设置文字
  text.text(rand(w/2-5), h/2 + rand(-2..2), code)
  # 随机直线
  for i in 1..rand(5)
    text.line(rand(w), rand(h), rand(w), rand(h)) #直线
  end
  text.fill('blue')
  # 燥点
  for i in 1..20
    text.point(rand(w), rand(h))
  end
  text.draw(img)
  #模糊
  # img = img.sketch(0, 10, 50)
  #扭曲
  img = img.wave(wave, 70)
  #返回图片数据流
  {img: img.to_blob, code: code}
end