// define icon path using os.Open()
iconFile, err := os.Open("/home/user/image/icon.png")
if err != nil {
log.Fatal(err)
}
defer iconFile.Close()
// png.Decode() to convert image path to image
img, err := png.Decode(iconFile)
if err != nil {
log.Fatal(err)
}
// Then convert the image to byte[] format using bytes.Buffer
buf := new(bytes.Buffer)
err1 := jpeg.Encode(buf, img, nil)
_ = err1
// save the converted byte[] to variable
img_buf := buf.Bytes()
// set the coverted byte[] icon using systray.SetTemplateIcon() method
systray.SetTemplateIcon(img_buf, img_buf)
8条答案
按热度按时间xvw2m8pv1#
您可以使用像akavel/rsrc这样的工具来生成一个.syso文件,其中包含嵌入在
.rsrc
节中的指定资源,旨在供Go链接器在构建Win32可执行程序时使用。例如lxn/walk应用程序,它在其可执行文件中嵌入了其他元数据。
-ico=""
:要嵌入的.ico文件的路径列表,以逗号分隔这不同于将二进制数据嵌入到围棋程序中。
使用jteeuwen/go-bindata。
要访问资产数据,我们使用
Asset(string) []byte
函数,该函数包含在生成的输出中。2021年更新:如John N的answer中所述,您还可以用途:
github.com/tc-hib/go-winres
一个简单的命令行工具,用于在使用Go构建的Windows可执行文件中嵌入常用资源:
它也可以用作图书馆。
6qfn3psc2#
这个主题很长,实际上
mingw
只是一个需求,我们不需要第三方依赖。此外,资源文件*.rc
对于win32可执行应用程序是必需的。最后,您可以在rc-demo中找到演示。1)使用Chocolatey安装mingw:
choco install mingw
2)创建
main.exe.manifest
文件3)创建
main.rc
文件4)建设
在git-bash窗口中执行以下命令:
windres -o main-res.syso main.rc && go build -i
qij5mzcb3#
上面的答案对我都不起作用。唯一的方法,我可以得到一个ico嵌入到一个去exe是与资源黑客。
http://www.angusj.com/resourcehacker/
1.安装并打开资源黑客
1.在Resource Hacker中打开编译的exe
1.操作>添加图像或其他二进制资源
1.选择ICO >添加资源
1.保存并关闭
如果需要将其添加到构建脚本中,也可以直接从命令行运行它。
anhgbhbe4#
有一个由Joseph Spurrier编写的github包GoVersionInfo:
Go语言的Microsoft Windows文件属性/版本信息和图标资源生成器
包创建一个syso文件,其中包含Microsoft Windows版本信息和一个可选图标。当你运行“go build”时,Go会在可执行文件中嵌入版本信息、一个可选的图标和一个可选的清单。如果syso文件与main()函数位于同一目录,Go会自动使用它。
h7wcgrx35#
这对我很有用
wecizke36#
这样做很好:
如果您的应用有GUI:
go-winres simply --icon icon.png --manifest gui
xxls0lw87#
我针对我的需求深入研究了这个问题,John N和Coconut提到的简单方法并没有像预期的那样工作。
经过更多的钻研,我找出了问题所在,我分享它,所以它可能对其他人有用。
cmd/main.go
文件用于构建时,syso文件不能放在项目的根目录中。cmd/main.go
文件时,将syso放置在cmd
下不会使其)。一些对我有用的例子:
扁平化项目结构
去哪儿.mod
和主路,走
然后
go build
按照预期创建了test1.exe
空包
把syso文件放在一个新的文件夹包和创建空文件与包的名称,强制导入此软件包使用
_
去哪儿.mod
rsrc.go
和主路,走
然后
go build -o test2.exe cmd\main.go
按预期创建了test2.exe
piggyback在现有包上
将syso文件放置在项目应用程序已使用的文件夹包中(**注意:**如果不同的应用程序使用该包,则它们将具有相同的syso)
去哪儿.mod
other.go
和主路,走
然后
go build -o test3.exe cmd\main.go
按预期创建了test3.exe
使用docker构建流程
基于现有包的Dockerized构建
因为,嘿,其他人可能也需要这个。
如果您有多平台/体系结构构建流,请使用arch将其设置为适当的ARCH
我希望这能帮助任何被困的人
thtygnil8#
你想先改变一个图标,你知道
setIcon() method
它只允许低byte[]
,所以你首先创建图像并转换成字节[]。以下过程也是如此。谢谢你!