网站截图

有什么方法在PHP中截取网站截图,然后将其保存到文件中?


最后编辑 :7年后,我仍然得到upvote fot这个答案,但我想这一个现在更准确。


当然你可以,但你需要用某种东西来渲染页面。 如果你真的只想使用PHP,我建议你HTMLTOPS,将页面渲染并输出到ps文件(ghostscript),然后将它转换为.jpg,.png,.pdf ..可以慢一点复杂的页面(并且不支持所有的CSS)。

否则,您可以使用wkhtmltopdf以pdf,jpg,whaterver格式输出html页面。接受CSS2.0,使用webkit(safari的包装器)渲染页面。所以应该没问题。 您必须将其安装在您的服务器上,以及..

更新现在,使用新的HTML5和JS功能,也可以使用Javascript将页面渲染为画布对象。 这里有一个很好的库:Html2Canvas,这里是由同一作者实现的一个实现,以获得像G +一样的反馈。 一旦你将dom渲染到画布中,你就可以通过ajax发送到服务器并将它保存为jpg。

编辑 :您可以使用imagemagick工具将pdf转换为png。 我的wkhtmltopdf版本不支持图像。 例如convert html.pdf -append html.png

编辑 :这个小外壳脚本给出了一个简单的/但在Linux上使用php5-cli和上述工具的使用示例。

编辑 :我现在注意到,wkhtmltopdf团队正在开发另一个项目:wkhtmltoimage,它直接为您提供jpg


从PHP 5.2.2开始,有可能只用PHP捕获一个网站

imagegrabscreen - 捕捉整个屏幕

<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>

imagegrabwindow - 使用窗口句柄(COM实例中的HWND属性) 抓取窗口或其客户区域

<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');

while($Browser->Busy){
  com_message_pump(4000);
}

$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>

编辑: 请注意,这些功能仅适用于Windows系统!


如果您不想使用任何第三方工具,我已经遇到了使用Google Page Insight API的简单解决方案。

只需要用params screenshot=true来调用它就可以了。

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=www.stackoverflow.com/&key={your_api_key}&screenshot=true

对于移动网站查看传递&strategy=mobile参数,

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=www.stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile

DEMO

链接地址: http://www.djcxy.com/p/68145.html

上一篇: Website screenshots

下一篇: Fragments controlled by a ViewPager in a Fragment do not appear