如何快速使用 GDK

如何快速使用 GDK

我尝试使用库 gdk 缩小图像并将其应用于 GdkImage。

这是代码 pixbuf = Gdk.pixbuf_new_from_file(fileName) pixbuf = pixbuf.scale_simple(100, 100, Gdk.INTERP_BILINEAR)

问题是,即使我使用小写字母,python 也找不到 Gdk

错误:pixbuf = Gdk.pixbuf_new_from_file(fileName) NameError:全局名称“Gdk”未定义

我不知道该怎么办,因为我尝试导入 Gdk,但没有任何改变

答案1

尝试像这样导入它:

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

然后:

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

我建议使用下面的命令,因为它在读取时会自动缩放。只需指定图像的大小(像素):

 pixbuf = Pixbuf.new_from_file_at_size(size_x, size_y, filename)
  • 使用scale_simple()不是保留纵横比。
  • 使用从文件新建文件(at_size)保留纵横比

答案2

我遇到了同样的问题。您的答案几乎对我有用,但我收到了以下错误消息:

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

但我在这里找到了它的定义gtkmm:gdkmm 枚举和标志

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

因此,当我像这样调用该函数时,它就起作用了:

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

...也许这对遇到同样问题的人有帮助;)

相关内容