# 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 two color palettes implemented: `iwanthue` and `google`.
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.
## 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')
=> ""
```
### In your model
Say, you have a model `User` (which must have attribute or method `name`)
```ruby
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