Полный цикл в digital

Создание превьюшки

Для работы с изображениями я использую библиотеку intervention, более подробно можно посмотреть на официальном сайте.

Например при добавлении нового поста, нужно создавать два уменьшенных изображения и сохранять путь к ним в базе данных. Для этого необходимо установить пакет intervention/image с помощью composer:

composer require intervention/image

Открываем файл config/app.php и добавляем следующие строки:

config/app.phpreturn [
    
    'providers' => [
        Intervention\Image\ImageServiceProvider::class,
    ],
    
    'aliases' => [
        'Image' => Intervention\Image\Facades\Image::class,
    ]
 
]

Исходный файл изображения будем сохранять без изменений в директорию storage/public/image/source, а уменьшенные копии — в директории storage/public/image/image и storage/public/image/thumb. Так что эти три директории нужно сразу создать. Кроме того, добавить в таблицу БД posts еще одно поле thumb.

app/Http/Controllers/PostController.phpclass PostController extends Controller {
    public function store(Request $request) {

        $post = new Post();
        $post->author_id = rand(1, 4);
        $post->title = $request->input('title');
        $post->excerpt = $request->input('excerpt');
        $post->body = $request->input('body');
        $source = $request->file('image');

        if ($source) {
            // меняем расширение
            $ext = str_replace('jpeg', 'jpg', $source->extension());
            // уникальное имя файла, под которым сохраним его в storage/image/source
            $name = md5(uniqid());
            // вручную указываем имя файла
            Storage::putFileAs('public/image/source', $source, $name. '.' . $ext);
            // создаем jpg изображение размером 1200x400, качество 100%
            $image = Image::make($source)
                ->resizeCanvas(1200, 400, 'center', false, 'dddddd')
                ->encode('jpg', 100);
            // сохраняем изображение под именем $name.jpg в директории public/image/image
            Storage::put('public/image/image/' . $name . '.jpg', $image);
            // уничтожаем изображение
            $image->destroy();
            // записываем в базу путь к файлу
            $post->image = Storage::url('public/image/image/' . $name . '.jpg');
            // создаем jpg изображение размером 600x200, качество 100%
            $thumb = Image::make($source)
                ->resizeCanvas(600, 200, 'center', false, 'dddddd')
                ->encode('jpg', 100);
            // сохраняем изображение под именем $name.jpg в директории public/image/thumb
            Storage::put('public/image/thumb/' . $name . '.jpg', $thumb);
            // уничтожаем изображение
            $thumb->destroy();
            // записываем в базу путь к файлу
            $post->thumb = Storage::url('public/image/thumb/' . $name . '.jpg');
        }

        // сохраняем запись в базу
        $post->save();
        return redirect()->route('post.index')->with('success', 'Новый пост успешно создан');

    }
}

Все готово, осталось только добавить шаблоны:

<img src="{{ $post->thumb ?? asset('img/default.jpg') }}" alt="" class="img-fluid">
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг