Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ksz2k/letter_avatar

Ruby gem for creating letter avatar from user's name (or any other string :-) ).
https://github.com/ksz2k/letter_avatar

letter-avatar ruby

Last synced: about 1 month ago
JSON representation

Ruby gem for creating letter avatar from user's name (or any other string :-) ).

Awesome Lists containing this project

README

        

# 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