我尝试使用库 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
...也许这对遇到同样问题的人有帮助;)