Qt: Thumbnails von Webseiten erstellen

Thumbnail des monsterli.ch Blog
Thumbnail das mit Hilfe von QWebpage und QPainter erstellt wurde

Das Qt Framework bietet mit dem Modul QtWebKit eine vollständige „Browser-Engine“, welche das Anzeigen und Bearbeiten von Webseiten ermöglicht. Dieses Modul ermöglicht auf einfache Weise Thumbnails von Webseiten zu erstellen. In der Dokumentation zu der Klasse QWebPage befindet sich auch eine Beispielklasse zum Erstellen von Thumbnails ohne Widgets zu verwenden. Muss also ein „Command Line Tool“ erstellt werden, ist das der ideale Startpunkt.

Thumbnailer Beispielklasse

Die Header-Datei der Thumbnailer-Klasse:


#ifndef THUMBNAILER_H
#define THUMBNAILER_H
#include 
#include 
#include 

class Thumbnailer : public QObject
 {
     Q_OBJECT

 public:
     Thumbnailer(const QUrl &url);

 signals:
     void finished();

 private slots:
     void render();

 private:
     QWebPage page;

 };

#endif // THUMBNAILER_H

Die Thumbnailer-Klasse:


#include "thumbnailer.h"

Thumbnailer::Thumbnailer(const QUrl &url)
{
    page.mainFrame()->load(url);
    connect(&page, SIGNAL(loadFinished(bool)),
        this, SLOT(render()));
}

void Thumbnailer::render()
{
    page.setViewportSize(page.mainFrame()->contentsSize());
    QImage image(page.viewportSize(), QImage::Format_ARGB32);
    QPainter painter(&image);

    page.mainFrame()->render(&painter);
    painter.end();

    QImage thumbnail = image.scaled(400, 300);
    thumbnail.save("thumbnail.png");

    emit finished();
}

Die main-Klasse:


#include "thumbnailer.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a( argc, argv);
    Thumbnailer myThumb(QUrl("http://www.google.com"));
    QObject::connect(&myThumb, SIGNAL(finished()), QApplication::instance(), SLOT(quit()));

    return a.exec();
}

 

Verwenden von Browser Plugins wie Adobe Flash

Verwendung von Plugins aktiviert
Verwendung von Plugins aktiviert
Verwendung von Plugins deaktiviert
Verwendung von Plugins deaktiviert

Damit auch die Flash-Elemente einer Webseite auf dem Thumbnail dargestellt werden, muss das Flash-Plugin bereits auf dem System installiert sein und das QWebSetting „PluginsEnabled“ aktiviert werden:


page.settings()->setAttribute(QWebSettings::PluginsEnabled, true);

 

Nützliche Links

QT Beispiel Projekt
WebScreenie is small qt command-line utility to create snapshot of webpages.
QT-Code websnap