如何用Fyne与Go编译含图片的项目?编译后图片不显示求助
解决Fyne-cross编译后图片无法加载的问题
问题根源很明确:你用file.LoadResourceFromPath()加载的是相对路径的本地文件,当把EXE移出原项目目录后,程序找不到相对路径下的图片文件了。而且fyne-cross编译默认不会自动把外部资源打包进可执行文件,这才是核心问题。
下面给两种可行的解决办法:
方法一:把图片嵌入到EXE里(推荐)
这种方法会把图片转换成Go代码的一部分,编译后EXE自带资源,无需额外文件:
- 先安装fyne命令行工具(没装的话执行):
go install fyne.io/fyne/v2/cmd/fyne@latest - 在项目根目录确保图片路径是
resources/img/planets/mercury.png - 执行资源打包命令,生成包含图片的Go文件:
fyne bundle -package main -o resources.go resources/img/planets/mercury.png- 命令执行后会生成
resources.go,里面有一个类似MercuryPng的字节数组变量
- 命令执行后会生成
- 修改代码,替换原来的加载逻辑:
原来的file.LoadResourceFromPath("resources/img/planets/mercury.png")可以换成fyne.NewStaticResource("mercury.png", MercuryPng)(变量名以实际生成的为准) - 最后重新用fyne-cross编译:
fyne-cross windows -arch=*,编译后的EXE移到任何目录都能正常显示图片
方法二:手动同步资源目录
如果不想打包资源,就保持资源和EXE的相对路径一致:
- 用fyne-cross编译完成后,把项目根目录下的
resources文件夹完整复制到EXE所在的目录 - 确保EXE和
resources目录处于同一层级,这样程序就能通过原来的相对路径找到图片 - 注意:分发程序时要把EXE和
resources目录一起打包
补充说明:之前用go build main.go本地能运行,是因为编译后的程序和资源文件在同一目录,相对路径有效;切换386架构不解决问题,因为核心是资源路径或打包的问题,和CPU架构无关。
内容的提问来源于stack exchange,提问作者Skaz
相关产品推荐
相关产品推荐

