Image dimension validation rules in Laravel 5.3

Posted on July 25, 2016 | By Matt Stauffer


Warning: This post is over a year old. I don't always update old posts with new information, so some of this information may be out of date.

In Laravel 5.3, we have a new validation option: image dimensions for image uploads. The validation rule is called dimensions, and you can pass the following parameters to it:

  • min_width: Images narrower than this pixel width will be rejected
  • max_width: Images wider than this pixel width will be rejected
  • min_height: Images shorter than this pixel height will be rejected
  • max_height: Images taller than this pixel height will be rejected
  • width: Images not exactly this pixel width will be rejected
  • height: Images not exactly this pixel height will be rejected
  • ratio: Images not exactly this ratio (width/height, expressed as "width/height") will be rejected

You can combine any rules that make sense together. Let's take a look at a few examples. First, let's set up our base install.

// routes file
Route::get('/', function () {
    return view('form');
});

Route::post('/', 'ImageController@postImage');
<!--form.blade.php-->
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="avatar">
    <input type="submit">
</form>

Now, let's make our ImageController and take a look at a few sample validations.

// ImageController
    public function postImage(Request $request)
    {
        $this->validate($request, [
             'avatar' => 'dimensions:min_width=250,min_height=500'
        ]);

        // or... 

        $this->validate($request, [
             'avatar' => 'dimensions:min_width=500,max_width=1500'
        ]);

        // or...

        $this->validate($request, [
             'avatar' => 'dimensions:width=100,height=100'
        ]);

        // or...

        // Ensures that the width of the image is 1.5x the height
        $this->validate($request, [
             'avatar' => 'dimensions:ratio=3/2'
        ]);
    }

That's it! One less thing you have to manage yourself in your own code.


Comments? I'm @stauffermatt on Twitter


Tags: laravel  •  laravel 5.3