Xwab
Форумыnavigate_nextПрограммирование на PHP

Скриншот сайта средствами php
Сообщения
Fresh

Видел сервисы скриншотеры. Стало любопытно как так сделать.
PrtScr не катит ))

18 Мар 2011, 21:08
DarveL

Обсуждалось в интернете.
Это просто так не сделать.

18 Мар 2011, 21:09
Fresh

Да находил в гугле темы, там чуть ли не браузеры на php собирались писать

18 Мар 2011, 21:11
Sandr

Вот http://habrahabr.ru/blogs/php/62965/

18 Мар 2011, 21:13
JESOD

В далеком 2008 такой скрипт сам юзал, а взял его из паблика. То ли с visavi, то ли с kento.

18 Мар 2011, 21:18
SL_NeKrOmAnT

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://ya.ru");
while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>
добавлено спустя 40 секунд:
--

http://4mas.ru/phpcodes/index.php?act=code&id=304

18 Мар 2011, 21:20
JESOD

Рабочий код - затестил. Только видимо с компьютера будет работать без проблем. Кое-что поправил для удобства.

<?php
$site_url = "http://www.habrahabr.ru";

$browser = new COM("InternetExplorer.Application");
$browser->Visible = true;
$browser->Fullscreen = true;
$browser->StatusBar = false;

$browser->Navigate($site_url);
while ($browser->Busy)
  com_message_pump(4000);

$handle = $browser->HWND; 
$screenWidth = $browser->Width;
$screenHeight = $browser->Height;
$documentHeight = $browser->Document->body->scrollHeight;

$scrollWidth = 20;
$scrollHeight = 20;
$testPartSize = 10*1024;

$im = imagecreatetruecolor($screenWidth - $scrollWidth, $documentHeight);
for($top = 0; $top < $documentHeight; $top += $screenHeight)
{
 $browser->Document->documentElement->scrollTop=$top;
 while ($browser->Busy)
  com_message_pump(4000);
 echo $browser->Document->documentElement->scrollTop.PHP_EOL;
 
 for($i = 0; $i < 5; $i++)
 {
  $part = imagegrabwindow($handle, 0);
  $dark = imagecolorallocate($part, 0, 0, 0);
  imagefilledrectangle($part, $screenWidth - $scrollWidth, 0, $screenWidth, $screenHeight, $dark);
  $testFile = sprintf("screenshot_%05d.png", $top);
  imagepng($part, $testFile, 9, PNG_ALL_FILTERS);
  clearstatcache();
  if(filesize($testFile) > $testPartSize)
   break;
   
  echo "Bad part, name: {$testFile}, try to generate again.".PHP_EOL;
 }
 
 imagecopy(
  $im, $part,
  0, $top,
  0, (!$top || ($top + $screenHeight) < $documentHeight) ? 0 : $screenHeight - $scrollHeight - $documentHeight % $screenHeight,
  $screenWidth - $scrollWidth, $screenHeight); 
 imagedestroy($part); 
}
imagepng($im, "screenshot.png", 9, PNG_ALL_FILTERS);
imagedestroy($im);

$browser->Quit();

?>

Источник: http://habrahabr.ru/blogs/php/62965/


__________
посл.ред. 18 Мар 2011, 21:27; всего 2 раз(а) 18 Мар 2011, 21:26
Fresh

JESOD, +1
Как я понял COM это только под винду?

18 Мар 2011, 21:26
DarveL

Fresh, да

18 Мар 2011, 21:32
Fresh

>>Можно из под апача запускать, но для этого надо менять
>>настройки безопасности.(С хабра)

А вот это как так сделать?
добавлено спустя 9 минут:
А js будет поддерживаться?

18 Мар 2011, 21:43
Ответить на тему