Spatie crop center issue with white background.

Updated: Feb 12, 2025

Spatie crop center issue with white background.

Spatie's Crop tool is a popular image manipulation library for Laravel applications. It allows developers to easily crop, resize, and manipulate images within their Laravel projects. However, when using the crop tool with a white background, some developers may encounter issues where the cropped image appears to have a transparent background instead of the expected white background.

To address this issue, you can follow the steps below:

  1. Install Intervention Image library: Before we proceed, ensure that you have Intervention Image library installed in your Laravel project. Intervention Image is a popular image manipulation library for PHP, and it is used as a dependency by Spatie's Crop tool. To install it, run the following command in your terminal:
composer require intervention/image
  1. Configure Intervention Image: After installing Intervention Image, you need to configure it in your Laravel project. Open the config/filesystems.php file and add the following lines under the local key:
'disks' => [
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],
],

Then, open the .env file and add the following line:

IMAGE_STORAGE=public
  1. Create a new image manipulation method: Create a new method in your Laravel controller or service to manipulate the image using Intervention Image. Here's an example method that crops an image with a white background:
public function cropImage($imagePath, $width, $height, $x, $y)
{
    $image = Image::make(storage_path($imagePath));
    $image->resize($width, $height, function ($constraint) {
        $constraint->aspectRatio();
    });
    $image->crop($width, $height, $x, $y);
    $image->backgroundColor('#FFFFFF');
    $image->save(storage_path($imagePath));
    return $image->url();
}

This method takes an image path, width, height, x, and y coordinates as arguments and returns the URL of the cropped image with a white background.

  1. Use the new image manipulation method: Finally, use the new image manipulation method in your Laravel controller or view to crop the image with a white background. Here's an example usage:
public function index()
{
    $imagePath = 'path/to/your/image.jpg';
    $width = 100;
    $height = 100;
    $x = 50;
    $y = 50;

    $croppedImageUrl = $this->cropImage($imagePath, $width, $height, $x, $y);

    return view('your-view', ['croppedImageUrl' => $croppedImageUrl]);
}

In your view, you can display the cropped image using its URL:

<img src="{{ $croppedImageUrl }}" alt="Cropped Image">

By following the steps above, you should be able to crop images with a white background using Spatie's Crop tool in Laravel.