# LetterAvatar Gem for creating letter avatar from user's name (or any other strong / character). Code extracted from [discourse](https://www.discourse.org/) source (thanks guys!) - I needed this functionality in three projects, so here's the gem! :-) [![Gem Version](https://badge.fury.io/rb/letter_avatar.svg)](https://badge.fury.io/rb/letter_avatar) [![Code Climate](https://codeclimate.com/github/ksz2k/letter_avatar/badges/gpa.svg)](https://codeclimate.com/github/ksz2k/letter_avatar) ## Examples #### Google's Inbox Palette ## Installation System requirements ```bash $ sudo apt-get install -y imagemagick ``` Mac OS X ```bash $ brew install imagemagick ghostscript ``` Add this line to your application's Gemfile: ```ruby gem 'letter_avatar' ``` And then execute: ```bash $ bundle ``` Or install it yourself as: ```bash $ gem install letter_avatar ``` ## Configuration ```ruby LetterAvatar.setup do |config| config.fill_color = 'rgba(255, 255, 255, 1)' # default is 'rgba(255, 255, 255, 0.65)' config.cache_base_path = 'public/system/lets' # default is 'public/system' config.colors_palette = :iwanthue # default is :google config.weight = 500 # default is 300 config.annotate_position = '-0+10' # default is -0+5 config.letters_count = 2 # default is 1 config.pointsize = 70 # default is 140 end ``` #### Color palette We have three color palettes implemented: `iwanthue`, `google` and `custom`. Each of them have different colors, but the `iwanthue` also differently calculates the color for specified username. The `google` selected will generate the same avatar for both, "Krzysiek" and "ksz2k" usernames given (both of them starts with letter "k"), but `iwanthue` will calculate it's md5 and then selects color, so there's huge chance that these usernames get different colors. ##### Custom palette definition You can define your own `custom` palette: ```ruby LetterAvatar.setup do |config| config.colors_palette = :custom config.custom_palette = [[120, 132, 205], [91, 149, 249], [72, 194, 249], [69, 208, 226]] end ``` ##### Custom font definition You can define your own `custom` palette: ```ruby LetterAvatar.setup do |config| config.font = File.join(File.expand_path('../../', File.dirname(__FILE__)), 'app/assets/fonts', 'font_name.ext') end ``` ## Usage ```ruby LetterAvatar.generate 'ksz2k', 200 => "public/system/letter_avatars/2/K/87_178_230/200.png" ``` ### In your controllers / views There's also helper for this. To use it, you need: * in your helper (eg. `ApplicationHelper`) or controller: ```ruby include LetterAvatar::AvatarHelper ``` * and in your view: ```ruby letter_avatar_for('ksz2k', 200) => "public/system/letter_avatars/2/K/87_178_230/200.png" # or letter_avatar_url('ksz2k', 200) => "/system/letter_avatars/2/K/87_178_230/200.png" # or even letter_avatar_tag('ksz2k', 200, class: 'av') => "\"ksz2k\"" ``` ### In your model Say, you have a model `User` (which must have attribute or method `name`) ```ruby require 'letter_avatar/has_avatar' class User include LetterAvatar::HasAvatar ... def name 'ksz2k' end end ``` Then, in your views you can use: ```ruby @user.avatar_path(200) => "public/system/letter_avatars/2/K/87_178_230/200.png" # or @user.avatar_url(200) => "/system/letter_avatars/2/K/87_178_230/200.png" ``` ### Way to support non [a-z0-9] charsets ```rb class User def username_for_avatar # Translate Chinese hanzi to pinyin # https://github.com/flyerhzm/chinese_pinyin Pinyin.t(self.username) end end ``` Then you can get right avatar now: ```rb letter_avatar_for(user.username_for_avatar, 200) # or letter_avatar_tag(user.username_for_avatar, 200, class: 'av') ``` ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request