composer require axn/laravel-glide
php artisan vendor:publish --tag="glide-config"
php artisan glide:key-generate
config/glide.php:
Define at least one server (e.g., images) with source (disk for originals) and cache (disk for processed images). Example:
'servers' => [
'images' => [
'source' => 'public',
'cache' => 'public/glide-cache',
'driver' => env('GLIDE_IMAGE_DRIVER', 'gd'),
'signatures' => true,
'sign_key' => env('GLIDE_SIGN_KEY'),
'base_url' => env('APP_URL'),
],
],
use Axn\LaravelGlide\Facades\Glide;
return Glide::url('path/to/image.jpg', ['w' => 300, 'h' => 200]);
Or return an image response directly:
return Glide::imageResponse('path/to/image.jpg', ['w' => 300]);
config/glide.php and config/glide_servers/*.php for server-specific settings.Axn\LaravelGlide\Facades\Glide for quick usage in controllers/blade.presets.small = ['w' => 100, 'h' => 100]).glide:key-generate for managing signing keys.Use the facade to generate URLs with transformations:
// Basic resize
$url = Glide::url('product.jpg', ['w' => 400]);
// Crop to fit
$url = Glide::url('avatar.png', ['w' => 150, 'h' => 150, 'fit' => 'crop']);
// Use a preset
$url = Glide::url('banner.jpg', ['p' => 'large']);
Blade Integration:
<img src="{{ Glide::url('image.jpg', ['w' => 200]) }}">
Switch between servers (e.g., images vs. avatars) for isolated configurations:
// Default server
Glide::url('photo.jpg', ['w' => 300]);
// Specific server
Glide::server('avatars')->url('user.jpg', ['w' => 100, 'fit' => 'crop']);
Return processed images directly in API/controllers:
// Return as image response (e.g., for API endpoints)
return Glide::imageResponse('document.pdf', ['w' => 800]);
// Return as Base64 (e.g., for email attachments)
$base64 = Glide::imageAsBase64('logo.png', ['w' => 200]);
Configure watermarks in glide_servers/*.php:
'watermarks' => [
'disk' => 'watermarks',
'images' => ['logo.png'],
'position' => 'bottom-right',
'opacity' => 50,
],
Apply in URLs:
$url = Glide::url('background.jpg', ['w' => 1024, 'watermark' => 'logo.png']);
Enable signatures: true in server config and set GLIDE_SIGN_KEY in .env. URLs will include a signature query parameter:
/glide/abc123.jpg?w=300&sig=abc123...
cache (e.g., s3, local with SSD) to avoid bottlenecks.Define presets in glide_servers/*.php to avoid repeating transformations:
'presets' => [
'small' => ['w' => 100, 'h' => 100, 'fit' => 'crop'],
'thumbnail' => ['w' => 150, 'h' => 150, 'fit' => 'inside'],
'watermarked' => ['w' => 800, 'watermark' => 'logo.png'],
],
Use in URLs:
Glide::url('image.jpg', ['p' => 'small']);
Create middleware to enable/disable Glide based on routes or user roles:
public function handle(Request $request, Closure $next) {
if (auth()->check() && auth()->user()->is_premium) {
$request->merge(['watermark' => null]); // Disable watermark for premium users
}
return $next($request);
}
GlideServer to test URL generation:
$server = $this->app->make('glide.server.images');
$url = $server->getUrl('test.jpg', ['w' => 100]);
$this->assertStringContainsString('w=100', $url);
Http::fake() or browser tests:
$response = $this->get('/glide/image.jpg?w=200');
$response->assertHeader('Content-Type', 'image/jpeg');
gd vs. imagick for your workload. Imagick is faster but requires installation.max_image_size in server config to avoid processing overly large images:
'max_image_size' => [2000, 2000], // Width x Height
php artisan storage:link # Ensure symlinks are up-to-date
Missing PHP Extensions:
Class 'GdImage' not found or ImagickException.gd or imagick via pecl or package manager (e.g., sudo apt-get install php8.4-imagick).Incorrect Disk Configuration:
League\Flysystem\FileNotFoundException or empty responses.source and cache disks exist and are accessible. Use php artisan storage:link for local disks.Signed URL Mismatches:
InvalidSignatureException when accessing signed URLs.GLIDE_SIGN_KEY matches the key in glide_servers/*.php.php artisan glide:key-generate.Watermark Path Issues:
FileNotFoundException.watermarks.disk and paths are correct (e.g., watermarks/logo.png).Facade Not Found:
Class 'Glide' not found after installation.config/app.php:
'providers' => [
Axn\LaravelGlide\GlideServiceProvider::class,
],
Preset Not Found:
InvalidArgumentException for undefined presets.glide_servers/*.php and use the correct name (case-sensitive).CORS Issues:
config/glide.php:
'
How can I help you explore Laravel packages today?