Новый пакет 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-изображений для страниц сайта (превью в соцсетях).
Снятие отчётных изображений и визуальных снимков для документации или маркетинга.
Мониторинг внешних страниц и визуальное сравнение изменений.
Интеграция в отчёты о тестировании.