是否可以在服务器端截取渲染的 DOM 的屏幕截图
Is it possible to take a screenshot of the rendered DOM on the server side?
在我的Web应用程序中,用户可以创建一些保存在我的数据库中的HTML/CSS标记。我想为该标记提供一个"缩略图",例如在概述视图中。
由于缩略图应该在 200x200 像素左右,而原始标记打算在 900x900 像素左右查看,因此我必须找到一种方法来"缩放"该标记:这应该就像我以 900 像素的渲染标记截图并将其缩小到 200 像素一样。
有谁知道使用JavaScript或PHP是否可以做到这一点?或者也许是另一种服务器端语言?我想避免使用任何第三方小程序,如ActiveX。
编辑:我想某种混搭,在客户端截取屏幕截图,然后发送到服务器也可以。
您可以使用WKHTMLTOPDF。它还具有保存称为WKHTMLTOIMAGE的图像的功能(我认为这是一个不同的发行版,但您可以从同一链接下载它)。您可以使用 PHP 中的exec()
作为系统调用运行它。使用像xvfb
这样的虚拟缓冲区,您可以在服务器上运行WKHTMLTOIMAGE无头。它是基于WebKit的,所以产生的结果非常好......
您可以使用标准PHP函数缩放生成的图像,例如在这些帖子中描述:
- 在 PHP jpg/png/gif 中动态缩放图像
- 如果图像太小,请使用 PHP 调整图像大小
你可能想在PHP中HTML2PDF查看我对这个问题的回答 - 转换实用程序和脚本 - 示例和演示,也许它也对你有帮助。
最好的办法是将作业分为两部分:制作屏幕截图,并将其缩小到 200x200。对于第一部分,您需要一个命令行工具或库,该工具或库可以将 HTML 直接呈现为位图文件(可能是 PNG);我不知道任何一瞬间的通知,但如果你真的有决心,我相信如果你知道你在做什么,那么在 webkit 和 libpng 周围做一个小包装应该不会太难。对于缩放,您可以使用gd(在大多数PHP设置上配置)或ImageMagick(更强大)。一旦你有了这两个,只需写出正确的胶水将它们放在一起。
简而言之,没有"简单"的方法可以做到这一点。
但是,这只是使用PHP的网站屏幕截图的副本
如果你想截取用户看到的内容,你必须使用一些客户端技术。我想你应该能够用闪光灯做到这一点。
这个答案可能会帮助你:使用 HTML5/Canvas/JavaScript 截取屏幕截图
否则,您可以尝试在服务器端"重新创建"类似的视图,例如使用WKHTMLTOPDF(如Michal建议的那样)。
是的,这是可能的,我什至使用php前端作为服务入口点实现了解决方案。真正的工作由PhantomJS/Xvfb处理,页面被渲染,它执行的javascript(对于网络上所有动态生成的内容非常重要)。
基本上,使用 PhantomJS 和 Xvfb 帧缓冲使这成为一项非常简单的任务,请在此处查看更多内容:http://code.google.com/p/phantomjs/和此处 http://skookum.com/blog/dynamic-screenshots-on-the-server-with-phantomjs/
干杯
我为此使用了 http://www.websupergoo.com/的ABCpdf,似乎运行良好,但它是商业产品,尽管它带有免费试用期。 我不隶属于这家公司。
- 获取屏幕截图并在电子邮件中发送的按钮
- 如何使用selenium和同步JS进行屏幕截图
- 使用javascript api创建youtube的屏幕截图
- 删除闪烁的光标进行网络屏幕截图测试
- 如何在html和javascript中捕捉聚合物元素的屏幕截图
- Phanomjs 未正确捕获网页的屏幕截图
- UIWebview在页面上执行注入的JavaScript后的屏幕截图
- 限制从iPad拍摄屏幕截图
- 使用Html2Canvas的文本区域屏幕截图
- 从json文件输出多个屏幕截图(例如itunes搜索api)
- 点击按钮即可创建网页的图片/pdf/屏幕截图
- 如何在asp.net中获取当前页面的屏幕截图
- 如何使用JavaScript拍摄部分谷歌地图的屏幕截图
- 拍摄元素的屏幕截图
- 如何使用javascript或jquery获取网页的屏幕截图
- 使用 chrome.tabs.captureVisibleTab 的屏幕截图
- HTML,尝试在左侧创建一个滑动菜单(带有屏幕截图)
- 适用于 PDF 的 PhantomJS 屏幕截图 - 画布缩放
- 在浏览器中的 NVD3(或带有 CSS 的 D3)的屏幕截图中
- 是否可以在服务器端截取渲染的 DOM 的屏幕截图