Сегодня предлагаю вам познакомиться с одним удобным пакетом (php-библиотекой) для работы с изображениями - "Intervention Image". Сайт данного пакета - http://image.intervention.io
Данный пакет позволяется форматировать ваши изображения, создавать миниатюры, налаживать водяные знаки и тд. Обо всем его функционале вы можете почитать на официальном сайте, я же приведу лишь пример установки данного пакета в проект на "чистом" php и базовое его использование. А именно - получение файла из формы и его сохранение в двух вариантах - с разрешением 1024х768 и 100х60.


Установка.
Установка осуществляется с помощью Composer - php-менеджера зависимостей.
Про Composer рассказывать не буду, если вы еще не умеете с ним работать, то обязательно стоит этому научиться, т.к. в настоящее время любой фреймворк и любое серьезное php-приложение его использует для загрузки различных библиотек, как это сейчас будем делать мы.

Команда установка пакета:
composer require intervention/image



Использование.
Цель данной заметки - показать базовое использование данной библиотеки. Поэтому, для наглядности и простоты, я решил разместить простенькую форму и php код в одном файле и не буду выполнять проверки, которые необходимы при получении данных из формы.

<?php

//подключение автозагрузчика Composer
require 'vendor/autoload.php';


if(isset($_FILES['img'])){

    if(is_uploaded_file($_FILES['img']['name'])){

        //название исходного файла без расширения   
        $fileName = pathinfo($_FILES['img']['name'], PATHINFO_FILENAME);  
        //расширение
        $fileExtension = pathinfo($_FILES['img']['name'], PATHINFO_EXTENSION);

        $img = $_FILES['img']['tmp_name']; //путь к файлу из временной папки


        //Объект Intervention\Image\ImageManager для работы с изображениями
        $manager = new Intervention\Image\ImageManager(array('driver' => 'imagick'));

         /*
          * Метод resize изменяет размер изображения
          * 1-й аргумент - ширина
          * 2-й аргумент - высота
          * 3-й аргумент (не обязательный) - доп.методы, тут - сохранить пропорции
          * Метод save - сохраняет изображение - передать полный путь с названием файла
          */       
        $img = $manager->make($img)->resize(1024, 768,function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        })->save('uploads/'.$_FILES['img']['name']);

        $img_mini = $manager->make($img)->resize(100, 60,function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        })->save('uploads/'.$fileName.'-100x60'.'.'.$fileExtension);
    }
}
?>


<form action="" method="POST" enctype="multipart/form-data">
 <input type="file" name="img" id="img">
 <input type="submit">
</form>

В данном примере изображение переданное из формы будет сохранено в папку uploads дважды:
1. С разрешением 1024х768px, имя файла будет как у исходного изображения;
2. С разрешением 100х60px, к имени файла будет добавлена строка «-100x60», например myimg-100x60.jpg

Я максимально прокомментировал код, думаю дополнительно пояснять нет смысла. Конечно, после сохранения файла можно сохранить его название в базу данных в соответствующую таблицу и тд., это уже все как обычно.

Тут выполняет как раз то, что очень часто необходимо при загрузке изображений на сервер из формы - большой размер изображения уменьшается до желаемого и сохраняется как исходное изображение, а так же создаются миниатюры для вывода на страницах, где нецелесообразно использовать и загружать изображение целиком. Разумеется можно создать множество миниатюр с разными размерами.

В библиотеке Intervention Image есть много интересных методов для обработки изображений, не только их уменьшение, заходите на официальный сайт, читайте.
Т.к. библиотека универсальна, ее можно подключить к любому фреймворку, а что касается Laravel, то есть инструкция как это сделать для максимально комфортного использования.