Делаем скриншоты с помощью пакета Laravel Screenshot

Новый пакет Spatie Laravel Screenshot предоставляет простой способ автоматически делать скриншоты веб-страниц прямо из вашего приложения на Laravel. Он пригодится, например, для создания изображений страниц, генерации Open Graph-картинок, визуальных отчетов или мониторинга.

Что такое Laravel Screenshot

Laravel Screenshot - это пакет, который позволяет захватывать скриншоты HTML-страниц или произвольного HTML-кода и сохранять их в файл. В основе лежит архитектура с драйверами. Вы сами выбираете, каким способом делать скриншот:

  • Browsershot - по умолчанию использует безголовый Chromium (через Node.js). Требует установленный Chrome/Chromium и Node.js.

  • Cloudflare Browser Rendering API - альтернатива без необходимости иметь браузер на сервере. Не требует Node.js и Chrome, заменяя их удалённым API-рендерингом от Cloudflare.

Пакет поставляется с удобными настройками по умолчанию: разрешение окна 1280×800, коэффициент устройства 2× для ретины, формат PNG и ожидание, пока сеть полностью загрузится перед снятием скриншота.

Установка через Composer

Выполните команду в корне проекта:

composer require spatie/laravel-screenshot

После установки при необходимости можно опубликовать конфигурационный файл:

php artisan vendor:publish --tag="laravel-screenshot-config"

Это позволит изменить драйвер, размеры окна, формат изображения и другие параметры по умолчанию.

Дополнительно может понадобиться установка самого Browsershot:

composer require spatie/browsershot

Начало работы: простой пример

После установки пакета можно сделать скриншот любой страницы буквально в пару строк:

use Spatie\LaravelScreenshot\Facades\Screenshot;

Screenshot::url('https://example.com')->save('screenshot.png');

Этот код загрузит страницу по URL и сохранит её в виде PNG-изображения с настройками по умолчанию.

Настройка размеров и качества

С помощью методов цепочки можно управлять размерами изображения, качеством и форматом:

Screenshot::url('https://example.com')
    ->width(1920)
    ->height(1080)
    ->quality(80)
    ->save('screenshot.jpg');
  • width и height задают размеры окна браузера.

  • quality регулирует качество при сохранении в JPEG (0–100).

Асинхронное создание скриншотов

Если вы хотите генерировать скриншоты в фоновом режиме (например, после отправки формы), пакет поддерживает очередь задач:

Screenshot::url('https://example.com')
    ->saveQueued('screenshot.png')
    ->then(fn (string $path, ?string $diskName) => 
        Mail::to($user)->send(new ScreenshotMail($path))
    );

После завершения генерации вы можете выполнить callback-функцию: например, отправить уведомление пользователю.

Тестирование скриншотов

Для тестирования пакет предоставляет удобные утилиты, которые позволяют подделать процесс скриншота без реального захвата изображения:

Screenshot::fake();

$this->get(route('screenshot'))->assertOk();

Screenshot::assertSaved(function ($screenshot) {
    return $screenshot->url === 'https://example.com';
});

Это позволяет проверять, вызывался ли метод захвата страницы, без сетевых запросов и записей на диск.

Примеры сценариев применения

Пакет особенно полезен в следующих случаях:

  • Автоматическая генерация Open Graph-изображений для страниц сайта (превью в соцсетях).

  • Снятие отчётных изображений и визуальных снимков для документации или маркетинга.

  • Мониторинг внешних страниц и визуальное сравнение изменений.

  • Интеграция в отчёты о тестировании.

Похожие статьи

Рекомендательные технологии Подробнее
Разработка и инструменты 6 месяцев назад

Почему простые архитектуры выигрывают: уроки системного дизайна от инженера GitHub

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

Как удалить Docker‑образы, контейнеры и тома: подробное руководство

Полное руководство по удалению Docker‑образов, контейнеров и томов. Включены подробные команды, примеры и советы по очистке Docker‑среды для освобождения места на диске.

Laravel Licensing: управление лицензиями в Laravel

Пакет Laravel Licensing добавляет в приложение систему лицензирования с активацией, ограничениями и офлайн-проверкой. Поддерживаются ключи, устройства и криптографические токены.