WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Загрузить и изменить размер нескольких изображений в Laravel

420

Помимо этого блога, у меня есть канал на YouTube, где я делюсь видеоуроками. Недавно один из подписчиков канала YouTube спросил об изменении размера нескольких изображений в Laravel. Они хотят изменить размер нескольких изображений за один раз. В этой статье мы изучаем, как загружать и изменять размер нескольких изображений в Laravel.

Intervention Image — это библиотека с открытым исходным кодом, которая позволяет нам манипулировать изображениями. Я собираюсь использовать эту библиотеку для изменения размера изображений.

Загрузить и изменить размер нескольких изображений в Laravel

Начиная

Для достижения нашей цели вам необходимо установить и настроить библиотеку Intervention Image в проект Laravel. Откройте терминал в корневом каталоге вашего проекта и выполните команду:

composer require intervention/image

После того, как библиотека установлена, откройте config/app.phpфайл и добавьте в него поставщиков услуг, фасад. Добавьте поставщиков услуг для этого пакета в $providersмассив.

InterventionImageImageServiceProvider::class,

Добавьте фасад в $aliasesмассив.

'Image' => InterventionImageFacadesImage::class,

Далее нам нужен каталог, в котором мы храним наши загруженные файлы. Файловая система Laravel предоставляет общедоступный диск для хранения файлов. Публичный диск содержит файлы, которые общедоступны. Вы найдете загруженные файлы в storage/app/publicпапке. Чтобы получить доступ к этим файлам в Интернете, вам необходимо создать символическую ссылку с public/storageна storage/app/public.

Создайте символическую ссылку с помощью команды:

php artisan storage:link

Эта команда создаст папку хранения в общедоступном каталоге. Здесь мы храним наши файлы.

Загрузить и изменить размер изображений в Laravel

Для того, чтобы загружать файлы на сервер, вам нужна форма. Давайте создадим форму, в которой вы можете выбрать несколько файлов для загрузки на сервер. Ниже приведен пример кода формы, которая войдет в ваш файл представления.

<form action="{{ url('ROUTE HERE') }}" method="post" enctype="multipart/form-data">     <div class="form-group">         <label for="exampleInputFile">File input</label>         <input type="file" name="profile_image[]" id="exampleInputFile" multiple />     </div>     {{ csrf_field() }}     <button type="submit" class="btn btn-default">Submit</button> </form>

В форме я взял имя входного файла как ‘profile_image []’, которое отправляет массив файлов на сервер. Кроме того, я добавил атрибут «несколько», который позволяет нам выбирать несколько файлов. Замените заполнитель ROUTE_URL своим фактическим значением.

Поскольку нам нужно загрузить и изменить размер изображений, в контроллере добавьте два фасада, как показано ниже.

<?php   namespace AppHttpControllers;   use IlluminateHttpRequest; use Image; //Intervention Image use IlluminateSupportFacadesStorage; //Laravel Filesystem   class ImageController extends Controller {   }

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

public function store(Request $request) {     if ($request->hasFile('profile_image')) {           foreach($request->file('profile_image') as $file){               //get filename with extension             $filenamewithextension = $file->getClientOriginalName();               //get filename without extension             $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);               //get file extension             $extension = $file->getClientOriginalExtension();               //filename to store             $filenametostore = $filename.'_'.uniqid().'.'.$extension;               Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));             Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));               //Resize image here             $thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);             $img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {                 $constraint->aspectRatio();             });             $img->save($thumbnailpath);         }           return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");     } }

Здесь мы пропорционально изменяем размер изображения. При этом мы сохраняем соотношение сторон, и изображение не будет обрезано. Я передаю ширину как 400 и высоту как 150. Вы можете изменить эти значения в соответствии с вашими требованиями.

Идите и проверьте это. Вы получите версию загруженных изображений с измененным размером в каталоге storage / profile_images / thumbnail.

Если вы ищете жесткий урожай, замените строки ниже

$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {     $constraint->aspectRatio(); }); $img->save($thumbnailpath);

С участием

$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);

Надеюсь, вы понимаете, как загружать и изменять размер нескольких изображений в Laravel. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

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