Laravel Screenshot дає змогу робити скріншоти веб‑сторінок у застосунках Laravel. Пакет побудовано на драйверній архітектурі — можна обрати Browsershot (Chromium) або Cloudflare Browser Rendering залежно від інфраструктури.
Основні можливості
Пакет підтримує:
- Підтримка драйверів — вибір між Browsershot (Chromium через Node.js) або Cloudflare Browser Rendering API
- Налаштування за замовчуванням — viewport 1280×800, device scale factor 2× (retina), формат PNG, очікування network idle
- Налаштування розмірів і якості — задавайте ширину, висоту та якість зображення для кожного скріншота
- Чергове фонове оброблення — генеруйте скріншоти асинхронно з підтримкою callback
- Тести — fake‑режим і допоміжні ассершени для перевірки генерації скріншотів
- Збереження на диску — зберігайте скріншоти на будь‑який налаштований диск Laravel filesystem
Пакет має два драйвери. Драйвер Browsershot (за замовчуванням) потребує Node.js та встановленого Chrome/Chromium на сервері. Драйвер Cloudflare вимагає облікового запису Cloudflare з доступом до Browser Rendering API, але не потребує Node.js чи Chrome.
Базове створення скріншота
Використовуйте фасад Screenshot для зйомки сторінки:
use Spatie\LaravelScreenshot\Facades\Screenshot;
Screenshot::url('https://example.com')->save('screenshot.png');
Цей приклад робить знімок у роздільності 1280×800 і зберігає його в PNG.
Налаштування розмірів і якості
Задайте розміри viewport та якість через ланцюжок викликів методів:
Screenshot::url('https://example.com')
->width(1920)
->height(1080)
->quality(80)
->save('screenshot.jpg');
Параметр quality приймає значення 0–100 і застосовується при збереженні в JPEG.
Фонове оброблення в черзі
Генеруйте скріншоти у фоновому режимі за допомогою saveQueued():
Screenshot::url('https://example.com')
->saveQueued('screenshot.png')
->then(fn (string $path, ?string $diskName) =>
Mail::to($user)->send(new ScreenshotMail($path))
);
Колбек then() отримує шлях до файлу та ім'я диска після завершення збереження.
Тестування генерації скріншотів
Пакет також містить утиліти для тестування — дозволяють перевіряти виклики генерації скріншотів без фактичного створення файлів:
Screenshot::fake();
$this->get(route('screenshot'))->assertOk();
Screenshot::assertSaved(function ($screenshot) {
return $screenshot->url === 'https://example.com';
});
Це запобігає зовнішнім HTTP‑запитам і запису на диск під час тестів, але дозволяє переконатися, що операції зі скріншотами виконувалися.
Приклади використання
- Генерація PDF
- Створення Open Graph‑зображень
- Моніторинг і архівування вебсайтів
- Візуальне регресійне тестування
- Формування звітів
Щоб дізнатися більше про Laravel Screenshot, відвідайте репозиторій на GitHub або прочитайте офіційну документацію.