Answers:
最后编辑时间:7年后,我仍然得到upvotes这个答案,但我想这一块现在更加精确。
当然可以,但是您需要使用某些内容渲染页面。如果您真的只想使用php,建议您使用HTMLTOPS,它会呈现页面并将其输出到ps文件(ghostscript)中,然后将其转换为.jpg,.png和.pdf可能会有点慢复杂的页面(并且不支持所有CSS)。
否则,您可以使用wkhtmltopdf以pdf,jpg等格式输出html页面。接受CSS2.0,使用webkit(Safari的包装器)呈现页面。您还必须将其安装在服务器上。
UPDATE现在,随着新的HTML5和JS的功能,也可以在页面呈现到使用JavaScript画布对象。这是一个不错的库:Html2Canvas,这是同一作者的实现,可以得到类似G +的反馈。将dom渲染到画布中之后,就可以通过ajax发送到服务器并将其另存为jpg。
编辑:您可以使用imagemagick工具将pdf转换为png。我的wkhtmltopdf版本不支持图像。例如convert html.pdf -append html.png
。
编辑:这个小shell脚本给出了一个简单的/但可以在php5-cli和上面提到的工具的Linux上使用的示例。
编辑:我现在注意到wkhtmltopdf团队正在另一个项目上:wkhtmltoimage,它直接为您提供jpg
从PHP 5.2.2开始,可以仅使用PHP捕获网站!
图像抓屏 —捕获整个屏幕
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow-使用Windows句柄(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调用它的api screenshot=true
。
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
对于移动网站视图&strategy=mobile
参数传递,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO。
您可以使用简单的无头浏览器(例如PhantomJS)来抓取页面。
您也可以将PhantomJS与PHP结合使用。
看看这个小php脚本可以做到这一点。在这里看看https://github.com/microweber/screen
这是API- http: //screen.microweber.com/shot.php?url = /programming/757675/website-screenshots-using-php
它是用Python编写的,但是仔细阅读文档和代码,您可以确切地看到它是如何完成的。如果您可以运行python,那么它是为您准备的解决方案:
请注意,所有内容都可以在一台计算机上运行一个平台,也可以在一台虚拟机上运行其他平台。
免费,开放源代码,滚动至页面底部,找到文档,源代码和其他信息的链接。
是的。如果您只需要URL图片,请尝试以下操作
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
将url作为参数传递,您将获得图像以获取更多详细信息,请检查此链接http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
好吧,PhantomJS是一种浏览器,可以轻松地放在服务器上并将其集成到php。您可以在WDudes中找到代码。它们具有更多功能,例如指定图像大小,缓存,下载为文件或在img src中显示等。
<img src=”screenshot.php?url=google.com” />
URL参数
宽度和高度:screenshot.php?url = google.com&w = 1000&h = 800
裁剪时:screenshot.php?url = google.com&w = 1000&h = 800&clipw = 800&cliph = 600
禁用缓存并加载新的
屏幕快照:screenshot.php?url = google.com&cache = 0
要下载图像,请执行以下操作:screenshot.php?url = google.com&download = true
您可以在此处查看该教程:使用不带API的PHP捕获网站的屏幕截图
我总是使用microweber屏幕捕获任何网页的屏幕截图。在这里我们可以找到写得很好的教程。这比较容易,学习时间不超过3分钟。
我终于按照@boksiora的建议使用microweber / screen进行设置。
最初在尝试上述链接时,我得到了什么:
Please download this script from here https://github.com/microweber/screen
我在Linux上。因此,如果要运行它,可以根据环境调整我的步骤。
这是我在DOCUMENT_ROOT
文件夹的外壳上执行的步骤:
$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart
将浏览器指向screen/demo/shot.php?url=google.com
。当看到屏幕截图时,您就完成了。有关更高级设置的讨论可在此处和此处进行。
有许多开源项目可以生成屏幕截图。例如PhantomJS,webkit2png等
这些项目的最大问题是,它们基于较旧的浏览器技术,并且在呈现许多网站时遇到问题,尤其是在过去的几个月/年中,使用webfonts,flexbox,svg以及其他各种HTML5和CSS规范的网站。
我已经尝试了一些第三方服务,其中大多数是基于PhantomJS的,这意味着它们也会产生质量差的屏幕截图。用于生成网站屏幕截图的最佳第三方服务是urlbox.io。这是一项付费服务,尽管有7天的免费试用期,可以在不承诺任何付费计划的情况下对其进行测试。
这是文档的链接,下面是简单的步骤,可通过composer在PHP中使用它。
// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots
// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');
// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';
// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'
// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />
例如,这是此页面的完整高度屏幕截图:
有很多选择,它们各有利弊。这是根据实现难度排序的选项列表。
优点
缺点
优点
缺点
优点
缺点
优点
缺点
免责声明:我是ApiFlash的创始人。我尽力提供诚实和有用的答案。
我在Windows上,因此在阅读完stephan的技巧后,我可以使用imagegrabwindow函数。我添加了裁剪(以摆脱浏览器标题,滚动条等)并调整大小以获取最终图像。这是我的代码。希望能对某人有所帮助。
这完全取决于您希望如何截取屏幕截图。
您可以通过PHP使用网络服务来完成此操作,从而为您获取图像
grabz.it有一个webservice可以做到这一点,这是一篇文章,显示了使用该服务的一个简单示例。
您可以使用https://grabz.it解决方案。
它有一个非常灵活的PHP API,可以通过不同的方式(例如从cronjob或PHP网页)进行调用。
为了实现它,您需要首先获取一个应用程序密钥和机密,然后下载(免费)SDK。
并举例说明。首先初始化:
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
和截图示例:
// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");
接下来是保存。Save
如果可以使用可公开访问的回调句柄(SaveTo
如果没有),则可以使用两种保存方法之一。有关详细信息,请查阅文档。
我使用了page2images。它是基于cutycapt开发的,它非常快速且稳定。如果您不想在性能和配置上花费太多时间,则应使用它。如果您访问他们的网站,则可以找到更多详细信息和示例PHP代码。
经过大量网上冲浪后,我发现了这一点。
PPTRAAS >一个免费工具,可通过将URL作为参数来捕获屏幕截图
他们只需点击其网址即可提供多种选择。
获取完整的屏幕截图
https://pptraas.com/screenshot?url= {您在此处输入网址}
获取特定尺寸的页面截图
https://pptraas.com/screenshot?url= {您在此处输入网址}&size = 400,400
甚至可以将页面转换为pdf
https://pptraas.com/pdf?url= {您在此处输入网址}
你可以做两件事。
使用木偶
您可以使用PHP Puppeteer软件包启动浏览器并截图。
使用API
有很多截图API。例如,您可以查看ScreenshotAPI.net。(免责声明,我是该API的创建者)
不直接。诸如Selenium之类的软件具有这样的功能,可以由PHP控制,但具有其他依赖性(例如,在要截屏的浏览器上在计算机上运行其基于Java的服务器)
我发现这是最好,最简单的工具: ScreenShotMachine。这是一项付费服务,但是您可以获得100张免费的屏幕截图,还可以花20美元(约20美元)购买另外2,000张,所以这是一笔不错的交易。它的用法非常简单,您只使用一个URL,所以我写了这个小脚本来基于它保存文件:
<?php
$url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
他们在这里有一个很好的文档,所以您绝对应该看看。