GdkPixbuf 返回“gi._glib.GError: 无法识别图像文件格式”

1 投票
3 回答
4438 浏览
提问于 2025-04-18 15:56

我在使用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 个回答

-1

看起来问题出在PNG库本身。我对此感到很惊讶,因为这个库来自一个普通的CentOS rpm,版本是libpng-1.2.49-1.el6_2.x86_64,而PNG标准已经稳定了很久。此外,我想我们在使用GTK2的时候并没有遇到这个问题,因为它也是用的同一个库……

无论如何,我从源代码编译了一个全新的libpng 1.6.2,然后重新配置并重新安装了gdk-pixbuf,现在它可以正常工作了。

1

这不是一个完整的答案,但提供了一些调试的小建议:检查一下 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

2

我遇到了一个类似的错误,提示有个奇怪的前缀。后来我通过设置 XDG_DATA_DIRS 来解决这个问题,因为我之前没有设置这个。

export XDG_DATA_DIRS=.../usr/share

来源: https://bugs.gentoo.org/644136

撰写回答