GdkPixbuf 返回“gi._glib.GError: 无法识别图像文件格式”
我在使用Gtk3的时候遇到了一个问题,加载PNG图片时出现了破损的图标。在调查后发现,这个问题是因为GdkPixbuf无法读取PNG文件。
我在Python控制台中复现了这个问题。
>>> from gi.repository import GdkPixbuf
>>> print(GdkPixbuf)
<gi.module.DynamicModule 'GdkPixbuf' from '/home/user1/ctcils/dusserm/applications/gobject-introspection/1.40.0/lib/girepository-1.0/GdkPixbuf-2.0.typelib'>
>>> GdkPixbuf.Pixbuf.new_from_file("/home/user1/ctcils/dusserm/applications/pycharm-community-3.4.1/bin/pycharm.png")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
gi._glib.GError: Couldn't recognize the image file format for file '/home/user1/ctcils/dusserm/applications/pycharm-community-3.4.1/bin/pycharm.png'
最近我遇到的很多问题都是因为我们需要编译Gtk3、pygobject以及它们所有的依赖项,并把它们安装到非标准的目录下。我怀疑这可能和gobject introspection有关(这是我遇到的很多问题中的最后一个)。
3 个回答
看起来问题出在PNG库本身。我对此感到很惊讶,因为这个库来自一个普通的CentOS rpm,版本是libpng-1.2.49-1.el6_2.x86_64,而PNG标准已经稳定了很久。此外,我想我们在使用GTK2的时候并没有遇到这个问题,因为它也是用的同一个库……
无论如何,我从源代码编译了一个全新的libpng 1.6.2,然后重新配置并重新安装了gdk-pixbuf,现在它可以正常工作了。
这不是一个完整的答案,但提供了一些调试的小建议:检查一下 gdk-pixbuf 提供了哪些图片加载器(你可以参考这个链接:Gdk-Pixbuf 默认支持哪些图片格式?)。你可以用下面的 Python 代码来检查:
from gi.repository import GdkPixbuf
for fmt in GdkPixbuf.Pixbuf.get_formats():
print(fmt.get_extensions())
如果什么都没有显示出来,说明 gdk-pixbuf 找不到任何加载器,这可能和安装位置有关(比如 --prefix 和/或 --libdir 的配置选项)。确认一下你是否在 gdk-pixbuf 预期找到加载器的地方安装了加载器(特别是 png 加载器)。这个位置应该类似于:<prefix>/lib[64]/gdk-pixbuf-2.0/<version>/loaders
另外,你也可以查看这个链接了解更多信息:https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-query-loaders.html
我遇到了一个类似的错误,提示有个奇怪的前缀。后来我通过设置 XDG_DATA_DIRS
来解决这个问题,因为我之前没有设置这个。
export XDG_DATA_DIRS=.../usr/share