Завантажте та змініть розмір кількох зображень у Laravel
Окрім цього блогу, я веду канал YouTube, де ділюсь відеоуроками. Нещодавно один із абонентів каналу YouTube запитав про зміну розміру кількох зображень у Laravel. Вони хочуть одночасно змінити розмір кількох зображень. У цій статті ми вивчаємо, як завантажувати та змінювати розмір декількох зображень у Laravel.
Intervention Image – це бібліотека з відкритим кодом, яка дозволяє нам маніпулювати зображеннями. Я збираюся використовувати цю бібліотеку для зміни розміру зображень.
Починаємо
Для досягнення нашої мети вам потрібно встановити та налаштувати бібліотеку 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. Будь ласка, поділіться своїми думками та пропозиціями в розділі коментарів нижче.
Пов’язані статті
- Як завантажити файл на S3 за допомогою файлової системи Laravel
- Як зробити резервну копію програми Laravel
- Як інтегрувати бюлетень MailChimp у додаток Laravel