Изменить размер изображения в Laravel с помощью библиотеки изображений вмешательства
Недавно один из наших читателей спросил, как изменить размер изображения в Laravel. Изменение размера изображения – обычная задача разработчиков. Разработчики должны делать это правильно. Рекомендуется изменять размер изображений в соответствии с размером контейнера. Это поможет вам улучшить скорость страницы. В этой статье мы изучаем, как изменить размер изображения в Laravel с помощью библиотеки Intervention Image.
Библиотека Intervention Image предоставляет простой способ изменить размер изображений. Эта библиотека использует GD Library и Imagick для внутренней обработки изображений.
Зачем изменять размер изображений?
Возьмем, к примеру, галерею. Во время работы над галереей мы обычно показываем небольшой эскиз в листинге. Когда кто-то нажимает на миниатюру, мы показываем исходное изображение. Здесь миниатюры – это измененная версия исходного изображения.
Допустим, ваш исходный размер изображения составляет 500 500, а размер контейнера миниатюр – 200 200. В этом случае вам следует изменить размер исходного изображения в соответствии с размером контейнера миниатюр. Использование изображения большого размера в маленьком контейнере – плохая практика. Это влияет на производительность сайта.
Это один из примеров того, почему мы должны изменять размер изображений. Есть еще много других. Сказав это, давайте посмотрим, как изменить размер изображения в Laravel с помощью библиотеки Intervention Image.
Монтаж
Для начала вам необходимо установить библиотеку Intervention Image в свой проект Laravel. В вашей системе должен быть установлен Composer. Откройте терминал в корневом каталоге вашего проекта и выполните следующую команду:
composer require intervention/image
После установки библиотеки откройте config/app.php
файл и добавьте в него следующие строки.
Добавьте в $providers
массив поставщика услуг этого пакета .
InterventionImageImageServiceProvider::class
Затем добавьте фасад в $aliases
массив.
'Image' => InterventionImageFacadesImage::class
Изменить размер изображения в Laravel
Чтобы изменить размер изображения, мы должны сначала написать код для загрузки изображения. Итак, сначала создайте каталог, в котором мы будем хранить изображения. Подойдите к терминалу и выполните команду:
php artisan storage:link
Эта команда создает каталог хранилища в папке общего доступа. В папке «хранилище» мы будем хранить полную и уменьшенную версию изображений.
Затем создайте форму в вашем файле просмотра. Я также добавляю код сообщения об успешном выполнении в файл лезвия.
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<form action="{{ url('PASS_ACTION_URL') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image" id="exampleInputFile">
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Замените заполнитель “PASS_ACTION_URL” своим маршрутом.
В контроллере необходимо добавить фасад «Изображение» библиотеки, который мы добавили в config/app.php
файл.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image;
class ImageController extends Controller
{
}
Добавляя фасад, мы можем вызывать функции библиотеки Intervention Image. В приведенном ниже коде я загружу изображение в двух местах. Одно из них – исходное изображение в папке profile_images. Второй находится в каталоге profile_images / thumbnail. Сначала я загружу исходное изображение в папку эскизов, а затем изменю его размер.
public function store(Request $request)
{
if($request->hasFile('profile_image')) {
//get filename with extension
$filenamewithextension = $request->file('profile_image')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('profile_image')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.time().'.'.$extension;
//Upload File
$request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $filenametostore);
//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('image')->with('success', "Image uploaded successfully."); //change the route as per your flow
}
}
Здесь я пропорционально изменяю размер изображения. При этом вы сохраните соотношение сторон, и изображение не будет обрезано. Я передал ширину 400 и высоту 150. Вы можете изменить эти значения в соответствии с вашими требованиями.
Если вы ищете резкую обрезку, замените строки ниже
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
С участием
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
После этого вы получите эскиз размером 100 * 100.
Я надеюсь, что вы сможете узнать об изменении размера изображения в Laravel с помощью библиотеки Intervention Image. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.
Статьи по Теме
- Оптимизация изображений с помощью пакета artisansweb / image-optimizer
- Руководство по загрузке и сжатию изображений в Laravel
- Изменить размер изображения в PHP с помощью TinyPNG