在headless服务器上呈现HTML以生成屏幕截图
我想从给定的URL创建网页截图。虽然可以使用Selenium RC等工具,但这需要一个图形环境。我正在运行一个无头Gentoo服务器 这将是工具链的一部分,其工作原理如下:在headless服务器上呈现HTML以生成屏幕截图,html,image-processing,Html,Image Processing,我想从给定的URL创建网页截图。虽然可以使用Selenium RC等工具,但这需要一个图形环境。我正在运行一个无头Gentoo服务器 这将是工具链的一部分,其工作原理如下: 获取URL 呈现HTML 导出渲染为图像文件 存储图像文件 您可以像运行framebuffer X-Server一样运行应用程序-一种简单的方法是使用基于Qt的应用程序在webkit小部件中呈现页面并另存为图像。这是一个例子 这里有一个我在Qt中使用过的快速命令行工具。我已经有一段时间没用了,但它应该还能用 #includ
- 获取URL
- 呈现HTML
- 导出渲染为图像文件
- 存储图像文件
#include <QtCore/QCoreApplication>
#include <QtGui>
#include <QtWebKit>
#include <QTextStream>
#include <QSize>
QWebView *view;
QString outfile;
void QWebView::loadFinished(bool ok)
{
QTextStream out(stdout);
if (!ok) {
out << "Page loading failed\n";
return;
}
view->page()->setViewportSize(view->page()->currentFrame()->contentsSize());
QImage *img = new QImage(view->page()->viewportSize(), QImage::Format_ARGB32);
QPainter *paint = new QPainter(img);
view->page()->currentFrame()->render(paint);
paint->end();
if(!img->save(outfile, "png"))
out << "Save failure\n";
QApplication::quit();
return;
}
int main(int argc, char *argv[])
{
QTextStream out(stdout);
if(argc < 3) {
out << "USAGE: " << argv[0] << " <url> <outfile>\n";
return -1;
}
outfile = argv[2];
QApplication app(argc, argv);
view = new QWebView();
view->load(QUrl(argv[1]));
return app.exec();
}
#包括
#包括
#包括
#包括
#包括
QWebView*视图;
QString输出文件;
void QWebView::loadFinished(bool ok)
{
QTextStream out(标准输出);
如果(!ok){
out page()->setViewportSize(视图->页面()->currentFrame()->contentsSize());
QImage*img=newqimage(视图->页面()->viewportSize(),QImage::Format_ARGB32);
油漆工*油漆工=新油漆工(img);
查看->页面()->currentFrame()->渲染(绘制);
绘制->结束();
如果(!img->保存(输出文件,“png”))
我很确定没有附加的监视器并不能阻止你运行X实例。这是一个很好的事实。你应该考虑把它作为一个答案。不幸的是,QtGUI和QtWebKit的要求本身需要充分的X。所以即使没有UI,也必须安装完整的X-Server。但是我猜这是CA。这是不可避免的。也许是为了构建它,但不是为了部署它——典型的Ubuntu或DebianBox需要XServerCommon和一些其他软件包。