Как сделать скриншоты страниц с помощью php?

Пользователь

от steve , в категории: PHP , год назад

Как сделать скриншоты страниц с помощью php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от terrence , год назад

@steve 

Для создания скриншотов страниц с помощью PHP можно использовать следующий подход:

  1. Установите библиотеку PhantomJS, которая позволяет работать с веб-страницами средствами JavaScript, включая создание скриншотов. Вы можете скачать ее с официального сайта http://phantomjs.org/ и установить на свой сервер.
  2. Создайте PHP-скрипт, который будет вызывать PhantomJS с помощью командной строки. Ниже приведен пример кода:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

// Укажите путь до исполняемого файла PhantomJS
$phantomjsPath = '/путь/до/PhantomJS/bin/phantomjs';

// URL страницы, для которой необходимо создать скриншот
$url = 'http://www.example.com';

// Путь до файла, в котором будет сохранен скриншот
$screenshotPath = '/путь/до/папки/сохранения/скриншота/screenshot.png';

// Ко***** для вызова PhantomJS с передачей URL и пути к файлу скриншота
$cmd = $phantomjsPath . ' ' . dirname(__FILE__) . '/rasterize.js ' . $url . ' ' . $screenshotPath;

// Выполнение команды
exec($cmd);

// Проверка успешного создания скриншота и вывод пути к файлу
if (file_exists($screenshotPath)) {
    echo 'Скриншот успешно создан: ' . $screenshotPath;
} else {
    echo 'Ошибка создания скриншота.';
}


  1. Создайте JavaScript-файл "rasterize.js", который будет выполнять создание скриншота. Ниже приведен пример кода:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var page = require('webpage').create();
var system = require('system');
var address = system.args[1];
var outputPath = system.args[2];

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Ошибка открытия страницы.');
    } else {
        window.setTimeout(function () {
            page.render(outputPath);
            phantom.exit();
        }, 200);
    }
});


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

Пользователь

от ian.heidenreich , 6 месяцев назад

@steve 

Дополнительно можно использовать более современный и легковесный подход с использованием библиотеки GuzzleHttp для отправки запросов к веб-странице и библиотеки Intervention Image для создания скриншотов.


Пример кода для создания скриншота страницы с применением указанных библиотек:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

require 'vendor/autoload.php';

use GuzzleHttpClient;
use InterventionImageImageManagerStatic as Image;

// URL страницы, для которой необходимо создать скриншот
$url = 'http://www.example.com';

// Путь до файла, в котором будет сохранен скриншот
$screenshotPath = '/путь/до/папки/сохранения/скриншота/screenshot.png';

// Создаем объект GuzzleHttpClient
$client = new Client();

// Отправляем GET-запрос к указанной странице
$response = $client->get($url);

// Получаем содержимое ответа
$html = $response->getBody()->getContents();

// Создаем изображение скриншота
Image::make($html)->save($screenshotPath);

// Проверяем успешное создание скриншота и выводим путь к файлу
if (file_exists($screenshotPath)) {
    echo 'Скриншот успешно создан: ' . $screenshotPath;
} else {
    echo 'Ошибка создания скриншота.';
}


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


Не забудьте установить библиотеки GuzzleHttp и Intervention Image через Composer перед использованием данного кода.