Login
Newsletter
Werbung

Do, 24. November 2011, 15:00

Pixelfreie Screenshots

Unter der Haube

Wenn jemandem gtk-vector-screenshot vorgeführt wird, so setzt spätestens beim Markieren der Knopfbeschriftungen oder des Webseiten-Inhalts in der erzeugten PDF-Datei ein erstauntes Raunen ein und an einem verwirrten Stirnrunzeln sieht man, dass der Zuschauer versucht zu verstehen, wie das wohl funktioniert. Natürlich kommt dabei nicht, wie man vielleicht zuerst vermutet, eine Texterkennung (OCR) zum Einsatz; auch versucht gtk-vector-screenshot nicht, aus den Pixeldaten die originale Linienführung zu rekonstruieren.

Alles was für dieses Feature nötig ist, bringt GTK+ von Haus aus mit. Schon länger werden die Widgets, also die Bildelemente wie Knöpfe und Menüs, mit der Graphik-Bibliothek Cairo gezeichnet. Diese unterstützt Pixelformate wie PNG-Dateien oder eben die Bildschirmausgabe ebenso wie die Ausgabe von Vektor-Graphik. Während früher in GTK+ jedes Widget für sich Cairo aufgerufen hat und dann die Pixel-Daten kombiniert wurden, wird seit GTK+ 3 das ganze Fenster in einem Rutsch erzeugt.

Hier setzt gtk-vector-screenshot an: Statt dem Fenster-Widget zu sagen, es solle sich auf den Bildschirm malen, wird ihm ein anderer Cairo-Kontext übergeben, der eine PDF-Datei erzeugt.

Für das Benutzerinterface ist noch ein Trick nötig. Die Screenshots müssen innerhalb der jeweiligen Anwendung erstellt werden, auch wenn es so aussehen soll, als ob dies mit einem speziellen Programm take-vector-screenshot gemacht wird. Dazu wird von jedem GTK-Programm das gtk-vector-screenshot-Modul beim Start geladen. Dieses markiert alle Fenster der Anwendung, um zu signalisieren, dass der Benutzer hiervon Vektor-Screenshots machen kann. Mit dem Befehl xprop GTK_VECTOR_SCREENSHOT kann man das überprüfen:

Das kleine Programm take-vector-screenshot lässt den Benutzer nun ein Fenster wählen und schickt über das X-Protokoll an dieses eine XClientMessage, auf die das Modul reagiert, den Datei-Speichern-Dialog anzeigt und das Fenster in die entsprechende Datei zeichnet.

Einschränkungen

Wie bereits erwähnt, funktioniert gtk-vector-screenshot nur mit Anwendungen, die auf GTK+ 3 aufbauen. Auch dann ist nicht garantiert, dass es perfekt funktioniert: Manche Programme zeichnen Teile des Bildschirms nicht mit Cairo, diese sind dann im Screenshot nicht zu sehen. Prominentestes Beispiel ist leider das GNOME-Terminal – aber dort zeichnet sich eine andere Lösung ab: Im GNOME-Bugtracker wartet ein Patch, der es ermöglichen wird, den Inhalt des Terminals einschließlich der Formatierung als HTML-Code zu kopieren.

Wählt man als Ausgabeformat SVG, so ist der Bildschirmtext als solcher nicht enthalten, man kann ihn also nicht finden oder markieren. Das ist ein Problem in Cairo, das gerade gelöst wird.

Auch kann gtk-vector-screenshot stets nur den Inhalt genau eines Fensters aufzeichnen, ohne den Fensterrahmen, der vom Fenstermanager hinzugefügt wird, und ohne den Mauszeiger. Um den ganzen Desktop aufnehmen zu können, müsste man jedes Fenster für sich aufnehmen und die Dateien dann entsprechend zusammensetzen. Wer hier oder auch anderweitig gtk-vector-screenshot verbessern will, ist herzlich eingeladen, sich auf Gitorious den aktuellen Code zu besorgen und loszubasteln.

Autoreninformation

Joachim Breitner (Webseite) studierte in Karlsruhe Mathematik und Informatik und arbeitet jetzt am Karlsruher Institut für Technologie. gtk-vector-screenshot ist eine Ausnahme von der Regel, dass der Debian-Entwickler vor allem in Haskell programmiert.

Dieser Artikel ist in freiesMagazin 11/2011 (ISSN 1867-7991) erschienen. Veröffentlichung mit freundlicher Genehmigung.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung