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

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

396

Помимо этого блога, у меня есть канал на 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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее