在Windows Kivy程序中.gif图像作为源正常运行,通过Kivy启动器运行时显示gif图像的背景

3 投票
2 回答
2335 浏览
提问于 2025-04-18 02:39

我正在运行一个程序,在一个小部件里显示一个.gif格式的图片,效果很好。不过,当我用kivy launcher运行这个应用时,这个.gif图片周围出现了一个方框,即使这个图片本身是没有背景的。

有没有人知道,为什么在安卓和Windows上表现得不一样呢?

下面是我使用.gif图片的.kv代码示例。我把这个.gif图片当作一个按钮来用。

<ButImage@ButtonBehavior+AsyncImage>
    canvas.before:
        Color:
            rgb: (0, 0, 1)
        PushMatrix
        Rotate:
            axis: 0,0,1
            angle: 20
            origin: self.center
    source: "images/butterflybluex.gif"
    canvas.after:
        PopMatrix

...

附加的GIF

2 个回答

0

我知道这个回复有点晚,但我最近遇到了这些问题,所以决定把文件的访问方式改成绝对路径。

原因是,Android和iOS的路径管理和电脑上是不同的。在电脑上,我们可以使用相对路径,这样可以自动获取当前路径和图片文件的路径,但在Android和iOS上,我们需要使用绝对路径来找到我们想用的图片或其他文件的路径。

在使用buildozer构建后,kivy应用中的文件路径无效

4

首先,确保你在打包apk的时候把pil/pillow加上去,这样才能加载gif图片。否则,安卓会使用一个很慢的纯Python加载器。其次,请详细说明你说的“方框”是什么意思?

更新:你更新的例子显示你在使用AsyncImage并且是本地资源。AsyncImage是用来处理远程网址的,对于本地资源,你可以直接使用Image类。

第二:如果你看到的是白色背景而不是你想要的图片,那说明你给的路径不对。确保你的图片在正确的文件夹里,或者你的文件夹在启动器的正确位置。

更新3:之前提到的问题是关于使用pil加载gif图片的。并不是所有的图片都能用它。你在电脑上能用是因为没有安装pil,而是用的一个纯Python的gif加载器。这个加载器在安卓上用不了,因为速度太慢。

一个解决办法是用gimp打开并保存图片,这样应该就能正常工作了。另一个办法是参与修复:使用pil的gif加载器……我得提醒你,网上有很多不同的gif,每个都有些许不同。确保一个能用可能会导致其他的不能用。

要在电脑上重现你的问题,只需安装pillow。

使用gif做动画时可能会出现很多问题,我建议你使用图片(png/jpg等)放在一个.zip文件里,然后把这个作为资源。这样可以避免很多问题。

请确保通过Image类提供的gif或.zip动画,只在你不需要太多控制动画的情况下使用。比如说静态动画,不会变化的那种。

如果你的动画需求超出了这个范围,那么你应该手动管理动画,加载一个精灵图集(sprite sheet)到一个Atlas里。

撰写回答