Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在headless服务器上呈现HTML以生成屏幕截图_Html_Image Processing - Fatal编程技术网

在headless服务器上呈现HTML以生成屏幕截图

在headless服务器上呈现HTML以生成屏幕截图,html,image-processing,Html,Image Processing,我想从给定的URL创建网页截图。虽然可以使用Selenium RC等工具,但这需要一个图形环境。我正在运行一个无头Gentoo服务器 这将是工具链的一部分,其工作原理如下: 获取URL 呈现HTML 导出渲染为图像文件 存储图像文件 您可以像运行framebuffer X-Server一样运行应用程序-一种简单的方法是使用基于Qt的应用程序在webkit小部件中呈现页面并另存为图像。这是一个例子 这里有一个我在Qt中使用过的快速命令行工具。我已经有一段时间没用了,但它应该还能用 #includ

我想从给定的URL创建网页截图。虽然可以使用Selenium RC等工具,但这需要一个图形环境。我正在运行一个无头Gentoo服务器

这将是工具链的一部分,其工作原理如下:

  • 获取URL
  • 呈现HTML
  • 导出渲染为图像文件
  • 存储图像文件

您可以像运行framebuffer X-Server一样运行应用程序-一种简单的方法是使用基于Qt的应用程序在webkit小部件中呈现页面并另存为图像。这是一个例子

这里有一个我在Qt中使用过的快速命令行工具。我已经有一段时间没用了,但它应该还能用

#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和一些其他软件包。