So verwenden Sie GDK mit Quickly

7

Ich versuche, die Bibliothek gdk zu verwenden, um ein Bild zu verkleinern und es auf ein GdkImage anzuwenden.

Dies ist der Code pixbuf = Gdk.pixbuf_new_from_file(fileName) pixbuf = pixbuf.scale_simple(100, 100, Gdk.INTERP_BILINEAR)

Das Problem ist, dass Python Gdk nicht finden kann, selbst wenn ich alles in Kleinbuchstaben verwende

Fehler: pixbuf = Gdk.pixbuf_new_from_file (Dateiname) NameError: Der globale Name 'Gdk' ist nicht definiert

Ich weiß nicht, was ich tun soll, weil ich versucht habe, Gdk zu importieren, aber nichts geändert wurde

max246
quelle

Antworten:

10

Versuchen Sie es wie folgt zu importieren:

 from gi.repository import Gtk
 from gi.repository.GdkPixbuf import Pixbuf, InterpType

dann:

 pixbuf = Pixbuf.new_from_file(filename)
 pixbuf = pixbuf.scale_simple(100, 100, InterpType.BILINEAR)

Ich würde empfehlen, den folgenden Befehl zu verwenden, da er beim Einlesen automatisch skaliert wird. Geben Sie einfach an, wie groß (Pixel) das Bild sein soll:

 pixbuf = Pixbuf.new_from_file_at_size(size_x, size_y, filename)
  • Bei Verwendung von scale_simple () wird das Seitenverhältnis nicht beibehalten.
  • Bei Verwendung von new_from_file_at_size () bleibt das Seitenverhältnis erhalten
Unbekannter
quelle
Ja, es funktioniert :)
max246
0

Ich hatte das gleiche Problem. Ihre Antwort hat fast für mich funktioniert, aber ich habe die folgende Fehlermeldung erhalten:

AttributeError: 'gi.repository.Gdk' object has no attribute 'INTERP_BILINEAR'

Aber ich fand die Definition hier gtkmm: gdkmm Enums and Flags :

Gdk::InterpType { 
  Gdk::INTERP_NEAREST, 
  Gdk::INTERP_TILES, 
  Gdk::INTERP_BILINEAR, 
  Gdk::INTERP_HYPER 
}

Für mich hat es also funktioniert, als ich die Funktion so aufgerufen habe:

from gi.repository import Gtk, Gdk
from gi.repository.GdkPixbuf import Pixbuf
...
pixbuf = Pixbuf.new_from_file('mypic.gif')
pixbuf = pixbuf.scale_simple(desired_width, desired_height, 2) # 2 := BILINEAR

... vielleicht hilft das jemandem mit dem gleichen Problem;)

Sebastian
quelle
Warum nicht die Antwort bearbeiten und das Problem lösen?
Braiam