Как сделать скриншот сайта на PHP?

November 5, 2015

Сегодня мне понадобилось для наполнения сайта заказчика сделать около 200 скриншотов разных сайтов. При этом итоговые изображения должны быть определенного формата, размера. Решил поделиться с общественностью вариантом решения задачи.

А решение очень простое. У меня лично нет времени изобретать велосипед, поэтому я воспользовался API замечательного сервиса для создания скриншотов s-shot.ru.

API очень простое. Нужно всего лишь обратиться по специально составленному URL и получить свое изображение. Вот примеры с официального сайта:

Для создания скриншота сайта достаточно одного параметра - его адреса.

http://mini.s-shot.ru/?адрес страницы

Дополнительные параметры:

разрешение - указывается в пикселях, например (1024x768), для полноразмерного скриншота указываем только ширину (1024)

размер - указывается ширина масштабированной картинки

формат - может принимать два значения (JPEG|PNG), по умолчанию JPEG

http://mini.s-shot.ru/разрешение/размер/формат/?адрес страницы

пример:

http://mini.s-shot.ru/1024x768/400/jpeg/?http://www.site.ru

или

http://mini.s-shot.ru/1024/400/png/?http://www.site.ru
Но если все же требуется создание своей скриншотилки, существует удобная библиотека https://github.com/KnpLabs/snappy

require __DIR__ . '/vendor/autoload.php';

use Knp\Snappy\Pdf;

$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');

// or you can do it in two steps
$snappy = new Pdf();
$snappy->setBinary('/usr/local/bin/wkhtmltopdf');

// Display the resulting pdf in the browser
// by setting the Content-type header to pdf
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput('http://www.github.com');

// Merge multiple urls into one pdf
// by sending an array of urls to getOutput()
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput(array('http://www.github.com','http://www.knplabs.com','http://www.php.net'));

// .. or simply save the PDF to a file
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
$snappy->generateFromHtml('

Bill

You owe me money, dude.

'
, '/tmp/bill-123.pdf');

// Pass options to snappy
// Type wkhtmltopdf -H to see the list of options
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
$snappy->setOption('disable-javascript', true);
$snappy->setOption('no-background', true);
$snappy->setOption('allow', array('/path1', '/path2'));
$snappy->setOption('cookie', array('key' => 'value', 'key2' => 'value2'));
$snappy->setOption('cover', 'pathToCover.html');
// .. or pass a cover as html
$snappy->setOption('cover', '

Bill cover

');
$snappy->setOption('toc', true);
$snappy->setOption('cache-dir', '/path/to/cache/dir');

Комментарии

comments powered by Disqus