如何在golang中设置应用程序图标?

时间:2014-09-01 09:20:31

标签: go icons

我刚刚在Windows上创建了我的第一个应用程序。

如何给它一个图标?

似乎没有任何构建标志可以做到这一点,我知道golang不支持资源。

7 个答案:

答案 0 :(得分:28)

您可以使用akavel/rsrc之类的工具来生成包含在.rsrc部分中的指定资源的.syso文件,目的是在构建Win32 excecutables时由Go链接器使用。

lxn/walk应用程序为例,它将其他元数据嵌入其可执行文件中。

rsrc [-manifest FILE.exe.manifest] [-ico FILE.ico[,FILE2.ico...]] -o FILE.syso

-ico="":以逗号分隔的.ico文件嵌入路径列表


这不同于将二进制数据嵌入到go程序中 为此,请使用jteeuwen/go-bindata

  

要访问资产数据,我们使用生成的输出中包含的Asset(string) []byte函数。

data := Asset("pub/style/foo.css")
if len(data) == 0 {
    // Asset was not found.
}

// use asset data

答案 1 :(得分:3)

主题很长,实际上mingw只是要求,我们不需要第三方依赖。此外,资源文件*.rc对于win32可执行应用程序是必需的。最后,您可以在rc-demo

中找到该演示

1)使用Chocolatey安装mingw:choco install mingw

2)创建main.exe.manifest文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="x86"
    name="controls"
    type="win32"
/>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

3)创建main.rc文件

100 ICON    "main.ico"
100 24      "main.exe.manifest"
101 RCDATA  "content.zip"

4)构建

在git-bash窗口中执行以下命令: windres -o main-res.syso main.rc && go build -i

答案 2 :(得分:2)

Joseph Spurrier有一个github包GoVersionInfo

  

用于Go语言的Microsoft Windows文件属性/版本信息和图标资源生成器

     

包创建一个syso文件,其中包含Microsoft Windows版本信息和可选图标。当您运行&#34; go build&#34;时,Go将在可执行文件中嵌入版本信息和可选图标以及可选清单。如果它与main()函数在同一目录中,Go将自动使用syso文件。

答案 3 :(得分:1)

以上所有答案均不适用于我。我可以将ico嵌入到GO exe中的唯一方法是使用Resource Hacker。

http://www.angusj.com/resourcehacker/

  1. 安装并打开Resource Hacker
  2. 在Resource Hacker中打开编译的exe
  3. 操作>添加图像或其他二进制资源
  4. 选择ICO>添加资源
  5. 保存并关闭

如果需要将其添加到构建脚本中,也可以直接从命令行运行它。

ResourceHacker -open main.exe -save output.exe -action addskip -res main.ico -mask ICONGROUP,MAIN,

答案 4 :(得分:0)

这对我有用

go get github.com/akavel/rsrc
rsrc -ico YOUR_ICON_FILE_NAME.ico
go build

答案 5 :(得分:0)

效果很好:

go install github.com/tc-hib/go-winres@latest
go-winres simply --icon youricon.png
go build

如果您的应用具有 GUI: go-winres simply --icon icon.png --manifest gui

答案 6 :(得分:0)

你改变一个图标首先认为你知道setIcon() method它只支持byte[]格式,所以你首先创建图像并转换成字节[]。请执行以下程序。

// 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)

谢谢!!!