hassanalisalem/laravel-initial-image
Installation:
composer require hassanalisalem/laravel-initial-image
Register the service provider in config/app.php under providers:
'providers' => [
Hassanalisalem\Image\DefaultProfileImageServiceProvider::class,
],
First Use Case: Generate a default profile image for a user with name "John Doe":
use Hassanalisalem\Image\Facades\DefaultProfileImage;
$image = DefaultProfileImage::create("John Doe");
$path = storage_path('app/profile_john_doe.png');
file_put_contents($path, $image->encode());
This creates a 512x512px PNG with "JD" in the center (default: black background, white text).
User Profile Images:
UserController or UserModel observers to auto-generate avatars on registration:
public function store(Request $request) {
$user = User::create($request->validated());
$image = DefaultProfileImage::create($user->name);
Storage::put("avatars/{$user->id}.png", $image->encode());
}
Dynamic Image Generation:
// In a controller
public function show(User $user) {
$image = DefaultProfileImage::create($user->name, 128);
return response($image->encode())->header('Content-Type', 'image/png');
}
<!-- Blade -->
<img src="{{ route('user.avatar', $user) }}" alt="Avatar" width="128">
Customization via Config:
config/default-profile-image.php:
'default' => [
'size' => 256,
'background' => '#212121',
'text_color' => '#FFFFFF',
'font_path' => resource_path('fonts/Roboto-Regular.ttf'),
],
$image = DefaultProfileImage::create("Alice", config('default-profile-image.default.size'));
Batch Processing:
foreach (User::all() as $user) {
$image = DefaultProfileImage::create($user->name);
Storage::put("avatars/{$user->id}.png", $image->encode());
}
Storage::disk('public')->put() for web-accessible avatars.Cache::remember) to avoid reprocessing.$cleanName = preg_replace('/[^a-zA-Z\s]/', '', $user->name);
$image = DefaultProfileImage::create($cleanName);
Font Path Issues:
font_path is invalid, the package falls back to a default font (may render differently).Name Truncation:
$displayName = explode(' ', $user->name, 2);
$displayName = count($displayName) === 1 ? $displayName[0] . ' ' . substr($displayName[0], 0, 1) : implode(' ', $displayName);
$image = DefaultProfileImage::create($displayName);
Storage Permissions:
chmod -R 755 storage/).Memory Limits:
memory_limit. Increase if needed:
ini_set('memory_limit', '512M');
$image = DefaultProfileImage::create("Test User");
file_put_contents('debug.png', $image->encode());
try {
$image = DefaultProfileImage::create($name, $size, $bg, $textColor, $font);
} catch (\Exception $e) {
Log::error("Avatar generation failed: " . $e->getMessage());
}
Custom Logic:
DefaultProfileImage class to add features (e.g., emoji support):
class ExtendedProfileImage extends \Hassanalisalem\Image\DefaultProfileImage {
public static function createWithEmoji($name, $size = 512) {
$text = str_replace(' ', '', $name) . '😊';
return parent::create($text, $size);
}
}
Configuration Overrides:
$image = DefaultProfileImage::create(
$user->name,
$user->prefers_large_avatar ? 512 : 256,
$user->theme === 'dark' ? '#1a1a1a' : '#ffffff'
);
Testing:
$mock = Mockery::mock('alias:DefaultProfileImage');
$mock->shouldReceive('create')->andReturn($this->getMockImage());
How can I help you explore Laravel packages today?