Делаем скриншоты с помощью пакета 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-изображений для страниц сайта (превью в соцсетях).

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

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

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

Комментарии (0)

Войдите, чтобы оставить комментарий

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

Что можно автоматизировать с помощью Bash: реальные сценарии и примеры

Подробный разбор возможностей Bash с практическими примерами: резервное копирование, деплой, мониторинг, обработка CSV, управление Docker и автоматизация серверных задач.

Как добавить SSH-ключ в аккаунт GitHub

Подробное руководство по добавлению SSH-ключа в аккаунт GitHub: генерация ключа, его добавление в агент, копирование и регистрация на сайте GitHub. Практические шаги для безопасного подключения к репозиториям без пароля.

Осваиваем сервис-контейнер Symfony с помощью современных PHP-атрибутов

Объясняем как использовать современные PHP-атрибуты для настройки сервис-контейнера Symfony, чтобы избавиться от сложной YAML-конфигурации и сделать код более компактным и понятным.