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

Создание эскиза в Laravel с помощью библиотеки изображений вмешательства

210

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

В этой статье мы изучаем, как создать миниатюру в Laravel с помощью библиотеки Intervention Image. Intervention Image — бесплатная и одна из популярных библиотек для работы с изображениями. В фоновом режиме эта библиотека использует GD Library и Imagick для управления изображениями.

Для этого урока я создам 3 эскиза — маленький, средний, большой с размерами 150 93, 300 * 185, 550 340 соответственно. Измените эти размеры в соответствии с вашими требованиями.

Начиная

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

composer require intervention/image

После установки библиотеки откройте config/app.phpфайл и добавьте в него следующие строки.

Добавьте поставщиков услуг для этого пакета в $providersмассив.

InterventionImageImageServiceProvider::class

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

'Image' => InterventionImageFacadesImage::class

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

php artisan storage:link

Эта команда создает каталог хранения (символическая ссылка) в общей папке. В эту папку я загружу исходное изображение и его миниатюры.

Создайте эскиз в Laravel

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

<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>

В контроллере вам нужно добавить фасад библиотеки Image, который мы добавили в config/app.phpфайл.

<?php    namespace AppHttpControllers;    use IlluminateHttpRequest; use Image;    class ImageController extends Controller {    }

Добавляя фасад, мы можем вызывать функции библиотеки Intervention Image. В приведенном ниже коде я загружу изображение в двух местах. Исходное изображение попадает прямо в storage/profile_imagesпапку. Миниатюры будут храниться в storage/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;           //small thumbnail name         $smallthumbnail = $filename.'_small_'.time().'.'.$extension;           //medium thumbnail name         $mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;           //large thumbnail name         $largethumbnail = $filename.'_large_'.time().'.'.$extension;           //Upload File         $request->file('profile_image')->storeAs('public/profile_images', $filenametostore);         $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $smallthumbnail);         $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $mediumthumbnail);         $request->file('profile_image')->storeAs('public/profile_images/thumbnail', $largethumbnail);            //create small thumbnail         $smallthumbnailpath = public_path('storage/profile_images/thumbnail/'.$smallthumbnail);         $this->createThumbnail($smallthumbnailpath, 150, 93);           //create medium thumbnail         $mediumthumbnailpath = public_path('storage/profile_images/thumbnail/'.$mediumthumbnail);         $this->createThumbnail($mediumthumbnailpath, 300, 185);           //create large thumbnail         $largethumbnailpath = public_path('storage/profile_images/thumbnail/'.$largethumbnail);         $this->createThumbnail($largethumbnailpath, 550, 340);            return redirect('image')->with('success', "Image uploaded successfully.");     } }

В приведенном выше коде я храню изображение в трех форматах: маленький, средний и большой. После их сохранения мы вызываем метод createThumbnailи передаем ему требуемую ширину и высоту. Определим эту функцию ниже. Эта функция должна входить в тот же контроллер.

/**  * Create a thumbnail of specified size  *  * @param string $path path of thumbnail  * @param int $width  * @param int $height  */ public function createThumbnail($path, $width, $height) {     $img = Image::make($path)->resize($width, $height, function ($constraint) {         $constraint->aspectRatio();     });     $img->save($path); }

Здесь мы пропорционально изменяем размер изображения. При этом мы сохраняем соотношение сторон, и изображение не будет обрезано.

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

$img = Image::make($path)->resize($width, $height, function ($constraint) {     $constraint->aspectRatio(); }); $img->save($path);

С участием

$img = Image::make($path)->resize($width, $height)->save($path);

Надеюсь, вы понимаете, как создать миниатюру в Laravel с помощью библиотеки Intervention Image. Я хотел бы услышать ваши мысли в разделе комментариев ниже.

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

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

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