Skip to content

renfordt/AvatarSmithy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Preview Image

AvatarSmithy

Forge beautiful avatars with ease.

PHP Version License PRs Welcome

A modern PHP library that bundles 7 avatar generation engines into a unified, fluent API. Create stunning avatars from user data with automatic fallback support and extensive customization.

Installation β€’ Quick Start β€’ Engines β€’ Examples β€’ Contributing


✨ Features

  • 🎨 7 Built-in Engines β€” From SVG initials to pixel art, Gravatar integration, and more
  • πŸ”— Fluent API β€” Intuitive builder pattern for effortless configuration
  • πŸ›‘οΈ Smart Fallback β€” Automatic failover between engines ensures reliability
  • πŸ“¦ Flexible Output β€” Export as HTML, Base64, URLs, PSR-7 responses, or stream directly
  • βš™οΈ Highly Customizable β€” Extensive styling options for each engine
  • πŸš€ Framework Agnostic β€” Works standalone or integrates seamlessly with Laravel/Symfony
  • πŸ”’ Type Safe β€” Built with strict types and PHPStan level max
  • ⚑ Modern PHP β€” Requires PHP 8.4+ with latest language features

πŸ“‹ Requirements

  • PHP 8.4 or higher
  • GD extension
  • Composer

πŸ“¦ Installation

Install via Composer:

composer require renfordt/avatar-smithy

πŸš€ Quick Start

Basic Usage

Generate an avatar with just a few lines:

use Renfordt\AvatarSmithy\Avatar;

// Simple avatar with email seed
$avatar = Avatar::engine('initials')
    ->seed('john.doe@example.com')
    ->name('John Doe')
    ->generate();

echo $avatar; // Outputs HTML img tag

Smart User Factory

Automatically extract email and name from user objects or arrays:

// Works with objects
$user = new User(['email' => 'jane@example.com', 'name' => 'Jane Smith']);
$avatar = Avatar::for($user)
    ->try('initials')
    ->size(300)
    ->generate();

// Works with arrays
$userData = ['email' => 'bob@example.com', 'name' => 'Bob Wilson'];
$avatar = Avatar::for($userData)
    ->try('gravatar')
    ->fallbackTo('initials')
    ->generate();

Fallback Chain

Create a robust avatar system with automatic fallbacks:

$avatar = Avatar::engine('gravatar')
    ->fallbackTo('dicebear')
    ->fallbackTo('initials')  // Final fallback always succeeds
    ->seed('user@example.com')
    ->name('User Name')
    ->size(256)
    ->generate();

🎨 Available Engines

Engine Description Network Example Use Case
initials SVG avatars with user initials in colored shapes ❌ Default user profiles
gravatar Fetches from Gravatar.com based on email hash βœ… Blog comments, social platforms
dicebear Fetches from DiceBear API (various styles) βœ… Fun, cartoon-style avatars
pixel Generates retro pixel-art style avatars ❌ Gaming platforms, retro themes
multicolor-pixel Multi-colored variant of pixel engine ❌ Vibrant pixel art avatars
bauhaus Bauhaus-inspired geometric art avatars ❌ Modern, artistic profiles
gradient Beautiful gradient-based avatars ❌ Minimalist, colorful designs

πŸ’‘ Tip: Engines marked with ❌ generate avatars locally without network requests, while βœ… engines fetch from external APIs.

πŸ“€ Output Formats

AvatarSmithy provides multiple output formats for maximum flexibility:

HTML Image Tag

$avatar->toHtml();
// <img src="data:image/svg+xml;base64,..."
//      alt="Avatar">

Base64 Data URI

$avatar->toBase64();
// data:image/svg+xml;base64,
// PHN2ZyB3aWR0aD0iMjAwIi...

URL or Raw Content

$avatar->toUrl();
// Gravatar: https://gravatar.com/...
// Local: data:image/svg+xml;base64,...

PSR-7 HTTP Response

// In a Laravel/Symfony controller
return Avatar::for($user)
    ->try('gravatar')
    ->fallbackTo('initials')
    ->toResponse();

Direct String Conversion

echo $avatar;
// Auto-converts to HTML img tag

Save to File

$avatar->save('/path/to/avatar.svg');
// Saves avatar to filesystem

βš™οΈ Configuration Options

Universal Options

These options work across all engines:

Avatar::engine('initials')
    ->seed('unique-identifier')      // Seed for deterministic generation
    ->name('John Doe')                // User's display name
    ->size(200)                       // Avatar size in pixels (default: 200)
    ->generate();

Engine-Specific Options

Initials Engine
Avatar::engine('initials')
    ->name('John Doe')
    ->size(256)
    ->shape('circle')                 // 'circle' or 'square'
    ->bold(true)                      // Bold font weight
    ->fontSize(100)                   // Custom font size
    ->backgroundColor(['#FF6B6B', '#4ECDC4', '#45B7D1'])  // Color palette
    ->generate();
Gravatar Engine
Avatar::engine('gravatar')
    ->seed('user@example.com')        // Email address
    ->size(256)
    ->defaultImage('identicon')       // '404', 'mp', 'identicon', 'monsterid',
                                      // 'wavatar', 'retro', 'robohash', 'blank'
    ->rating('g')                     // 'g', 'pg', 'r', 'x'
    ->generate();
DiceBear Engine
Avatar::engine('dicebear')
    ->seed('user@example.com')
    ->size(256)
    ->style('avataaars')              // DiceBear style (e.g., 'avataaars', 'bottts')
    ->backgroundColor('#FF6B6B')      // Hex color
    ->radius(10)                      // Border radius
    ->generate();
Pixel Engines
// Single color pixel
Avatar::engine('pixel')
    ->seed('user@example.com')
    ->size(256)
    ->pixels(5)                       // Grid size (5x5 pixels)
    ->symmetry(true)                  // Mirror horizontally
    ->foregroundLightness(0.4)        // Lightness of colored pixels (0.0-1.0)
    ->backgroundLightness(0.9)        // Lightness of background (0.0-1.0)
    ->generate();

// Multi-color pixel
Avatar::engine('multicolor-pixel')
    ->seed('user@example.com')
    ->size(256)
    ->pixels(6)
    ->symmetry(true)
    ->numColors(4)                    // Number of colors in palette
    ->backgroundLightness(0.95)
    ->generate();
Bauhaus Engine
Avatar::engine('bauhaus')
    ->seed('user@example.com')
    ->size(256)
    ->numShapes(5)                    // Number of geometric shapes
    ->numColors(3)                    // Color palette size
    ->fillAll(false)                  // Whether to fill entire canvas
    ->generate();
Gradient Engine
Avatar::engine('gradient')
    ->seed('user@example.com')
    ->size(256)
    ->gradientType('linear')          // 'linear' or 'radial'
    ->colorStops(3)                   // Number of color stops
    ->generate();

πŸ’Ž Advanced Examples

Laravel Integration

// routes/web.php
Route::get('/avatar/{user}', function (User $user) {
    return Avatar::for($user)
        ->try('gravatar')
        ->fallbackTo('initials')
        ->size(400)
        ->toResponse();
});

// In a Blade template
<img src="{{ route('avatar', $user) }}" alt="{{ $user->name }}">

Custom Styling with Fallback Chain

$avatar = Avatar::for($user)
    ->try('gravatar')
    ->fallbackTo('dicebear')
    ->fallbackTo('initials')
    ->size(300)
    ->defaultImage('404')             // Gravatar: fail if not found
    ->style('avataaars')              // DiceBear: cartoon style
    ->shape('circle')                 // Initials: circular shape
    ->bold(true)                      // Initials: bold text
    ->generate();

Batch Generation

$users = User::all();
$avatars = [];

foreach ($users as $user) {
    $avatars[$user->id] = Avatar::for($user)
        ->try('initials')
        ->size(150)
        ->generate()
        ->toBase64();
}

Dynamic Engine Selection

function generateAvatar(array $user, string $preferredEngine = 'initials'): string
{
    return Avatar::for($user)
        ->try($preferredEngine)
        ->fallbackTo('initials')
        ->size(200)
        ->generate()
        ->toHtml();
}

// Usage
echo generateAvatar($user, 'pixel');
echo generateAvatar($adminUser, 'gravatar');

🀝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details on:

  • Development setup and testing
  • Code quality standards
  • Architecture overview
  • Creating custom engines
  • Pull request process

πŸ“„ License

This package is open-source software licensed under the MIT license.

πŸ™ Credits

Created by renfordt

Built with:


βš’οΈ Forge beautiful avatars with AvatarSmithy βš’οΈ

⬆ Back to Top

About

A modern PHP package that bundles multiple avatar generation engines. Forge beautiful avatars with ease.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

Generated from renfordt/php-skeleton