lasserafn/php-initial-avatar-generator
Generate initial-based avatar images in PHP. Create colorful letter avatars (e.g., user initials) for profiles and placeholders, with configurable size, font, colors, and shapes. Lightweight, framework-agnostic, easy to integrate in any app.
Installation Add the package via Composer:
composer require lasserafn/php-initial-avatar-generator
No additional configuration is required—it’s a standalone library.
Basic Usage Import the generator and create an avatar from a name:
use Lasser\InitialAvatarGenerator\InitialAvatarGenerator;
$generator = new InitialAvatarGenerator();
$avatarUrl = $generator->generate('John Doe');
Outputs a URL like:
https://initial-avatar-generator.example.com/j/d/johndoe.png
First Use Case Use it in a Laravel Blade template to display user avatars:
<img src="{{ InitialAvatarGenerator::generate($user->name) }}" alt="Avatar" width="50">
Dynamic Avatar Generation Generate avatars on-the-fly for users without uploaded images:
$avatar = InitialAvatarGenerator::generate($user->full_name);
Customization Override default colors or styles via constructor options:
$generator = new InitialAvatarGenerator([
'background_colors' => ['#FF5733', '#33FF57'],
'text_color' => '#FFFFFF',
]);
Caching Cache generated URLs to avoid regenerating for the same name:
$cacheKey = 'avatar_' . md5($user->name);
$avatarUrl = cache()->remember($cacheKey, now()->addHours(1), function() use ($user) {
return InitialAvatarGenerator::generate($user->name);
});
Integration with Eloquent
Add an accessor to your User model:
public function getAvatarAttribute()
{
return InitialAvatarGenerator::generate($this->name);
}
Usage:
<img src="{{ $user->avatar }}" alt="Avatar">
API Responses Return avatars in JSON APIs:
return response()->json([
'user' => [
'name' => $user->name,
'avatar' => InitialAvatarGenerator::generate($user->name),
],
]);
Name Normalization
The generator converts names to lowercase and replaces spaces with underscores.
Example: "John Doe" → j/d/johndoe.png.
Fix: Pre-process names if you need custom formatting:
$normalized = strtolower(str_replace(' ', '-', $user->name));
URL Structure
The default URL structure is /{first_letter}/{second_letter}/{slug}.png.
If you host the generator elsewhere, ensure your server routes match this pattern.
Performance Generating avatars on every request can be slow for high-traffic apps. Solution: Cache aggressively or pre-generate avatars for known users.
Character Limits
Very long names (e.g., "Supercalifragilisticexpialidocious User") may break the URL.
Fix: Truncate or hash names:
$shortName = substr($user->name, 0, 20);
try-catch to log issues:
try {
$avatar = InitialAvatarGenerator::generate($name);
} catch (\Exception $e) {
Log::error("Avatar generation failed for {$name}: " . $e->getMessage());
$avatar = asset('fallback-avatar.png');
}
Custom Backend Replace the default URL generation with your own storage (e.g., S3):
$generator = new InitialAvatarGenerator();
$generator->setStorage(new CustomStorageAdapter());
Additional Metadata Extend the generator to include size or format parameters:
$generator->generate('John Doe', ['size' => 100, 'format' => 'svg']);
Theming Pass dynamic themes based on user roles:
$theme = $user->isAdmin() ? 'admin' : 'default';
$generator->setTheme($theme);
How can I help you explore Laravel packages today?