...
✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Завантажте та змініть розмір кількох зображень у Laravel

16

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