class Avatarly
Constants
- BACKGROUND_COLORS
Public Class Methods
generate_avatar(text, opts={})
click to toggle source
# File lib/avatarly.rb, line 18 def generate_avatar(text, opts={}) if opts[:lang] text = UnicodeUtils.upcase(initials(text.to_s.gsub(/[^[[:word:]] ]/,'').strip, opts), opts[:lang]) else text = initials(text.to_s.gsub(/[^\w ]/,'').strip, opts).upcase end generate_image(text, parse_options(opts)).to_blob end
lib()
click to toggle source
# File lib/avatarly.rb, line 31 def lib File.join root, 'lib' end
root()
click to toggle source
# File lib/avatarly.rb, line 27 def root File.expand_path '../..', __FILE__ end
Private Class Methods
default_options()
click to toggle source
# File lib/avatarly.rb, line 79 def default_options { background_color: BACKGROUND_COLORS.sample, font_color: '#FFFFFF', size: 32, vertical_offset: 0, font: "#{fonts}/Roboto.ttf", format: "png" } end
draw_text(canvas, text, opts)
click to toggle source
# File lib/avatarly.rb, line 50 def draw_text(canvas, text, opts) Magick::Draw.new do |md| md.pointsize = opts[:font_size] md.font = opts[:font] md.fill = opts[:font_color] md.gravity = Magick::CenterGravity end.annotate(canvas, 0, 0, 0, opts[:vertical_offset], text) end
fonts()
click to toggle source
# File lib/avatarly.rb, line 37 def fonts File.join root, 'assets/fonts' end
generate_image(text, opts)
click to toggle source
# File lib/avatarly.rb, line 41 def generate_image(text, opts) image = Magick::RVG.new(opts[:size], opts[:size]).viewbox(0, 0, opts[:size], opts[:size]) do |canvas| canvas.background_fill = opts[:background_color] end.draw image.format = opts[:format] draw_text(image, text, opts) if text.length > 0 image end
initials(text, opts)
click to toggle source
# File lib/avatarly.rb, line 59 def initials(text, opts) if opts[:separator] initials_for_separator(text, opts[:separator]) elsif text.is_email? initials_for_separator(text.split("@").first, ".") elsif text.include?(" ") initials_for_separator(text, " ") else initials_for_separator(text, ".") end end
initials_for_separator(text, separator)
click to toggle source
# File lib/avatarly.rb, line 71 def initials_for_separator(text, separator) if text.include?(separator) text.split(separator).compact.map{|part| part[0]}.join else text[0] || '' end end
parse_options(opts)
click to toggle source
# File lib/avatarly.rb, line 88 def parse_options(opts) opts = default_options.merge(opts) opts[:size] = opts[:size].to_i opts[:font] = default_options[:font] unless Pathname(opts[:font]).exist? opts[:font_size] ||= opts[:size] / 2 opts[:font_size] = opts[:font_size].to_i opts[:vertical_offset] = opts[:vertical_offset].to_i opts end