找回密码
 立即注册
首页 业界区 业界 SharpIco:用纯C#打造零依赖的.ico图标生成器,支持.NET ...

SharpIco:用纯C#打造零依赖的.ico图标生成器,支持.NET9与AOT编译

椎蕊 2025-6-3 00:27:32
前言

最近一直在完善我今年的两款桌面软件:视频剪辑工具 Clipify 和 AI 文章创作工具 StarBlogPublisher
虽然界面是基本完善了,但图标还是默认的,显得很不专业
于是我打算给这俩软件换个好看的图标
早在 VB6.0 年代,我用过一款开源的 ICO 图标制作工具,不过现在已经找不到了
网上搜到的很多 ICO 制作工具都是针对 favicon 的
其他的要不太重,要不就是收费,于是我把目光重新放在了开源工具上
找到了一个基于 nodejs 实现并且零依赖的(大部分都是依赖于 Magick 这个 C++实现的图片库),然而很遗憾,这个工具在我电脑上并不能使用……
目标

这时我想起来之前曾经用 c# 开发了一个图片格式转换工具,使用了 .Net8 的 AOT 功能,可以像 go 语言那样开发出跨平台的单可执行文件
所以我决定继续使用 C# 开发一个图标生成工具,这个工具可以实现:

  • 纯 C# 实现,没有外部依赖,跨平台,单可执行文件,AOT
  • 将 png 图片分解为多张不同尺寸的小图片(边长 16, 32, 48, 64, 128, 256, 512),然后合成一张 ICO 图标,实现不同尺寸屏幕的良好视觉体验
  • 支持 Inspect 功能,可以读取并分析 ICO 图标
  • 方便的分发方式,支持 dotnet tool, scoop, brew 等工具一键安装
目前已经完成了,并且也发布到了 nuget 和 scoop,接下来再研究下如何发布到 brew
项目主页: https://github.com/star-plan/sharp-ico
实现

在 SharpIco 中,.ico 文件的生成完全不依赖 ImageMagick 或任何图像处理外部工具,而是通过纯 C# 代码手工拼接符合规范的 ICO 二进制结构。
这部分的核心类是 IcoGenerator,具体代码我就不贴了,在项目里有,挑几个要点介绍吧~
生成多尺寸图像

使用 ImageSharp 生成多尺寸图像
  1. var clone = original.Clone(ctx => ctx.Resize(size, size));
  2. clone.SaveAsPng(ms);
复制代码

  • 使用 ImageSharp 的 Resize 与 Clone 功能,将原始高分辨率 PNG 生成多个目标尺寸(如 16x16、32x32、256x256)
  • PNG 格式保存到内存流中,用于后续写入 .ico
<blockquote>

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册