Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Initial Image Laravel Package

hassanalisalem/laravel-initial-image

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation:

    composer require hassanalisalem/laravel-initial-image
    

    Register the service provider in config/app.php under providers:

    'providers' => [
        Hassanalisalem\Image\DefaultProfileImageServiceProvider::class,
    ],
    
  2. 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).


Implementation Patterns

Core Workflows

  1. User Profile Images:

    • Use in 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());
      }
      
  2. Dynamic Image Generation:

    • Generate on-the-fly in Blade templates (e.g., for placeholder avatars):
      // 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">
      
  3. Customization via Config:

    • Override defaults in config/default-profile-image.php:
      'default' => [
          'size' => 256,
          'background' => '#212121',
          'text_color' => '#FFFFFF',
          'font_path' => resource_path('fonts/Roboto-Regular.ttf'),
      ],
      
    • Use in code:
      $image = DefaultProfileImage::create("Alice", config('default-profile-image.default.size'));
      
  4. Batch Processing:

    • Generate images for all users in a seed or command:
      foreach (User::all() as $user) {
          $image = DefaultProfileImage::create($user->name);
          Storage::put("avatars/{$user->id}.png", $image->encode());
      }
      

Integration Tips

  • Laravel Filesystem: Leverage Storage::disk('public')->put() for web-accessible avatars.
  • Caching: Cache generated images (e.g., with Cache::remember) to avoid reprocessing.
  • Validation: Sanitize input names to prevent edge cases (e.g., names with symbols):
    $cleanName = preg_replace('/[^a-zA-Z\s]/', '', $user->name);
    $image = DefaultProfileImage::create($cleanName);
    

Gotchas and Tips

Pitfalls

  1. Font Path Issues:

    • If font_path is invalid, the package falls back to a default font (may render differently).
    • Fix: Verify the font file exists and is accessible by the PHP process.
  2. Name Truncation:

    • Names with 1 character (e.g., "A") or no surname (e.g., "John") may produce unclear images.
    • Workaround: Pad single-letter names or enforce full names in validation:
      $displayName = explode(' ', $user->name, 2);
      $displayName = count($displayName) === 1 ? $displayName[0] . ' ' . substr($displayName[0], 0, 1) : implode(' ', $displayName);
      $image = DefaultProfileImage::create($displayName);
      
  3. Storage Permissions:

    • Ensure the storage directory is writable (chmod -R 755 storage/).
  4. Memory Limits:

    • Large images (e.g., 1024px+) may hit PHP’s memory_limit. Increase if needed:
      ini_set('memory_limit', '512M');
      

Debugging

  • Check Output: Save the raw image to inspect issues:
    $image = DefaultProfileImage::create("Test User");
    file_put_contents('debug.png', $image->encode());
    
  • Log Errors: Wrap usage in a try-catch to log exceptions:
    try {
        $image = DefaultProfileImage::create($name, $size, $bg, $textColor, $font);
    } catch (\Exception $e) {
        Log::error("Avatar generation failed: " . $e->getMessage());
    }
    

Extension Points

  1. Custom Logic:

    • Extend the 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);
          }
      }
      
  2. Configuration Overrides:

    • Dynamically override settings per user:
      $image = DefaultProfileImage::create(
          $user->name,
          $user->prefers_large_avatar ? 512 : 256,
          $user->theme === 'dark' ? '#1a1a1a' : '#ffffff'
      );
      
  3. Testing:

    • Mock the service in tests to avoid filesystem I/O:
      $mock = Mockery::mock('alias:DefaultProfileImage');
      $mock->shouldReceive('create')->andReturn($this->getMockImage());
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle