Bild-Datei in die Zwischenablage kopieren und auslesen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Mr. Kanister
User
Beiträge: 11
Registriert: Montag 16. Juni 2008, 16:45
Wohnort: Bedburg

Mittwoch 30. Juli 2008, 21:45

Hallo zusammen

Ich möchte ein Python-Skript schreiben, mit dem ich einen Ausschnitt des Bildschirms kopieren kann und diesen dann (eventuell vorher über eine temporäre Datei) in die Zwischenablage kopieren um ihn zB. in GIMP einfügen zu können.

Vom Prinzip her funktioniert das mit der Zwischenablage auch gut, jedoch nur bei Bilder bis zu einer bestimmten Größe/Auflösung (welche Aspekt dafür verantwortlich ist, weiß ich nicht)

Beispiel:
Ich habe eine PNG-Datei (Größe: 150 KB, Auflösung: 417 x 493 px) im Order /home/martin//fotos/test.png. Ich gehe wie folgt vor (interaktive Python-Konsole):

Code: Alles auswählen

>> import gtk
>> board = gtk.Clipboard()
>> bild = gtk.gdk.pixbuf_new_from_file("/home/martin/fotos/test.png")
>> board.set_image(bild)
>> board.store()
Dieses Bild kann ich jetzt zB. in GIMP oder in GNUPaint aus der Zwischenablage einfügen.

Wenn ich jedoch zB. das Bild in den Maßen vergrößere, dann funktioniert das Einfügen (bei ca. 250 KB, 500 x 592 px) nicht mehr, obwohl es in der Python-Konsole keine Fehlermeldung gibt.

Habt ihr vielleicht eine Idee, woran das liegen könnte?

Gruß Martin[/code]
LINUX - May the source be with you!
Mr. Kanister
User
Beiträge: 11
Registriert: Montag 16. Juni 2008, 16:45
Wohnort: Bedburg

Donnerstag 31. Juli 2008, 12:47

LINUX - May the source be with you!
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Donnerstag 31. Juli 2008, 23:00

Zumindest unter X11 hängt so etwas immer vom verwendeten Clipboard-Manager ab, und z.B. mit klipper scheint ``store`` nicht zu funktionieren, wenn man die Applikation beendet, sind die Daten weg, laut diesem Blogeintrag scheint glipper es hingegen zu unterstützen.

Um Screenshots von Fenstern zu machen, habe ich mir vor geraumer Zeit einmal die folgende Funktion geschrieben:

Code: Alles auswählen

def window_to_pixbuf(window):
    screen = window.get_screen()
    pixbuf = gtk.gdk.Pixbuf(
        gtk.gdk.COLORSPACE_RGB,
        False,
        8,
        *window.get_size()
    )
    pixbuf.get_from_drawable(
        window,
        screen.get_default_colormap(),
        0, 0, 0, 0,
        *window.get_size()
    )
    return pixbuf
Wobei man als ``window``-Argument eben

Code: Alles auswählen

gtk.gdk.get_default_root_window()
übergibt, um ein Bildschirmfoto zu machen.
Mr. Kanister
User
Beiträge: 11
Registriert: Montag 16. Juni 2008, 16:45
Wohnort: Bedburg

Freitag 1. August 2008, 14:16

Trundle hat geschrieben:Zumindest unter X11 hängt so etwas immer vom verwendeten Clipboard-Manager ab, und z.B. mit klipper scheint ``store`` nicht zu funktionieren, wenn man die Applikation beendet, sind die Daten weg, laut diesem Blogeintrag scheint glipper es hingegen zu unterstützen.
An klipper kann es nicht liegen da ich Ubuntu mit GNOME benutze ;)...glipper habe ich mir jetzt auch mal installiert, leider ohne Erfolg.
Scheinbar ist es auch so, dass Bild-Ausschnitte, die in der Zwischenablage sind, anders gespeichert werden als Text. In glipper gibt es nämlich keine Spur von Bilddaten, wenn ich welche in die Zwischenablage kopiert habe.
Trundle hat geschrieben:Um Screenshots von Fenstern zu machen, habe ich mir vor geraumer Zeit einmal die folgende Funktion geschrieben:

Code: Alles auswählen

def window_to_pixbuf(window):
    screen = window.get_screen()
    pixbuf = gtk.gdk.Pixbuf(
        gtk.gdk.COLORSPACE_RGB,
        False,
        8,
        *window.get_size()
    )
    pixbuf.get_from_drawable(
        window,
        screen.get_default_colormap(),
        0, 0, 0, 0,
        *window.get_size()
    )
    return pixbuf
Wobei man als ``window``-Argument eben

Code: Alles auswählen

gtk.gdk.get_default_root_window()
übergibt, um ein Bildschirmfoto zu machen.
Vielen Dank...funktioniert super :)

Fehlt jetzt nur noch, dass man auch Bilder in die Zwischenablage bekommt, die Größer als 420 x 500 px groß sind :roll:
LINUX - May the source be with you!
Antworten