【问题标题】:GdkPixbuf returns "gi._glib.GError: Couldn't recognize the image file format"GdkPixbuf 返回“gi._glib.GError:无法识别图像文件格式”
【发布时间】:2014-08-04 15:44:32
【问题描述】:

我在 Gtk3 中加载 PNG 图像时遇到问题。 我在我的 ToolButtons 中损坏了图像符号,经过一番调查,它似乎来自 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 内省存在问题(长列表中的最后一个)。

【问题讨论】:

  • 您是如何构建这些库并将其安装到非标准目录的?
  • 我使用了带有选项 --prefix 的传统 cofigure/make/make install。我所说的非标准只是指每个库都安装在 NFS 上的特定目录中(有些目前安装在我的主目录中),而不是像 /usr/local 这样的公共目录。
  • 似乎建议使用JHbuild,但是我们安装的服务器上没有网络访问权限。

标签: python gtk3 pygobject gdkpixbuf gobject-introspection


【解决方案1】:

不是一个完整的答案,而是一些调试提示:检查 gdk-pixbuf 提供的图像加载器(另请参阅What image formats are supported by Gdk-Pixbuf (Gtk-Image?) by Default?)。一个 Python sn-p 来检查这个:

from gi.repository import GdkPixbuf
for fmt in GdkPixbuf.Pixbuf.get_formats():
    print(fmt.get_extensions())

如果没有显示,gdk-pixbuf 没有找到任何可能与安装位置有关的加载程序(--prefix 和/或--libdir 配置选项)。验证您已将加载程序安装到 gdk-pixbuf 期望找到它们的位置(尤其是 png 加载程序)。这应该类似于:/lib[64]/gdk-pixbuf-2.0//loaders

另见:https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-query-loaders.html

【讨论】:

  • 看起来一切就绪。 Pixbuf.get_formats 返回包含 [png] 的图像格式的完整列表。 gdk-pixbuf-query-loaders 有一个指向 libpixbufloader-png.so 位置的 png 条目。 libpixbufloader-png.so 位于加载程序目录中。我用 ldd 检查了它的依赖关系,它看起来很好。加载器缓存文件就位。我尝试设置 GDK_PIXBUF_MODULEDIR 和 LD_LIBRARY_PATH 没有成功。
  • 我的系统中安装了 2 个 libpng,libpng12.so.0.49.0 和 libpng.so.3.49.0。 libpixbufloader-png.so 依赖于 libpng12。正常吗?在配置过程中,我看到它优先寻找 libpng16,而 libpng12 只是一个后备。能解释一下吗?
  • 感谢您的帮助。你知道 pixbuf 和特定版本的 libpng 之间是否存在真正的依赖关系吗?
【解决方案2】:

我遇到了一个带有异常前缀的类似错误,并通过设置 XDG_DATA_DIRS 解决了它,我没有设置。

export XDG_DATA_DIRS=.../usr/share

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

【讨论】:

    【解决方案3】:

    问题似乎是由于 PNG 库本身造成的。 考虑到它来自常规的 CentOS rpm libpng-1.2.49-1.el6_2.x86_64 并且 PNG 是多年以来的稳定标准,我感到非常惊讶。此外,我认为 GTK2 使用相同的库没有问题......

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

    【讨论】:

    • 确实很奇怪,很高兴看到你想通了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2021-01-13
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多