
这个工具解决什么问题
做软件的人几乎都碰到过这件事:WinForms 项目要一个 app.ico,规格写着「请同时包含 16、32、48、256」;或者反过来,从别人软件里抠出来的 ico 只想知道里面那张原图长什么样。手工用画图软件一个一个尺寸另存,二十几张图能做到手酸;用 ImageMagick 这类工具,又要先装环境、再记 convert 的参数写法,`-define icon:auto-resize=16,24,32,48,64,128,256` 这种字符串对不写代码的人基本等于天书。放到在线转换站上更别扭:图片是自己的,先上传到陌生服务器;一次只给转一个;转完还想换个尺寸,得重新再来一遍。这个工具就干这一件事:文件拖进窗口,勾好尺寸,点一下开始。
- 原来的做法:用画图软件把每张图按 16/32/48/256 各另存一遍,再靠第三方工具拼成 ico;或者装 ImageMagick 记参数写批处理脚本。
- 用这个工具:把文件拖进窗口(或点「添加文件」),勾要生成的尺寸,点「开始转换」,运行日志逐行给出每个文件的结果。
- 省下来的:几十张图一轮转换在十几秒内完成,不用装任何环境,也不用把图片上传到网络。
技术实现
界面是 WinForms 窗体 + AntdUI 控件,全部操作在窗口里用鼠标完成。转换核心没有依赖任何第三方图像库:ICO 容器的读写由一个自写的类完成,缩放与编码走 .NET 自带的 GDI+。这样做的目的是让成品保持单个 exe、不联网、不受外部库的版本变化影响。选择自写 ICO 而不是直接用 System.Drawing 的 Icon 类,是因为 Icon 类只能保存单一尺寸,也无法写出符合规范的 AND 掩码,做不出「一个文件里装 7 个尺寸」的图标。
- ICO 容器按规范手工拼装:6 字节头(保留 0 + 类型 1 + 画面数)后跟每条 16 字节的目录项。256 这个尺寸在单字节的宽/高字段里按规范写成 0,读的时候再把 0 还原回 256,否则会读出一个 0×0 的画面。
- 小尺寸用 DIB、大尺寸用 PNG 压缩:边长小于 128 的画面写成 32 位 DIB(BITMAPINFOHEADER,biHeight 填两倍高度:下半是 AND 掩码),并补 1 位/像素的 AND 掩码,老程序和老资源浏览器都认;边长 128 及以上写成 PNG 压缩条目(Vista 之后支持),体积只有裸位图的几分之一。
- 读老图标时的两个坑:biClrUsed(调色板使用数)在 BITMAPINFOHEADER 里偏移是 32 而不是 20,读错会把调色板大小读成图像字节数;另外很多老图标的 alpha 通道整幅全为 0,透明信息实际在 AND 掩码里,这时必须按掩码打洞,不能把 alpha 当透明用,否则导出的一片黑底。
- 高质量缩放并防黑边:缩放用 InterpolationMode.HighQualityBicubic 配合 PixelOffsetMode / SmoothingMode / CompositingQuality 三档 HighQuality。双三次插值会采样到画布边缘之外的像素,导致图片四周出现一圈半透明黑边,标准做法是用 ImageAttributes.SetWrapMode(WrapMode.TileFlipXY) 把边缘像素镜像延展,实测能彻底消掉这圈黑边。
- JPG 没有透明通道,先压白底:导出格式选 JPG 时,先把带 alpha 的位图叠加到纯白背景上再编码,编码时用 EncoderParameters 传 Encoder.Quality(本项目固定 92)。不压白底的直接后果是透明区域变成纯黑。
- 批量执行不冻结界面:转换在后台线程逐文件执行,界面更新通过框架的 App.UpdateUI 回主线程;每个文件的状态(待处理 / 转换中 / 成功 / 失败 / 跳过)实时写进表格行,「停止」按钮置一个 volatile 标志位让循环下一轮退出,不做线程强杀。同名文件默认不覆盖,自动加 _1、_2 后缀另存。
技术栈:C# 5.0、.NET Framework 4.8、WinForms 窗体、AntdUI 2.3.2、System.Drawing (GDI+)
已知局限:图标尺寸最高支持到 256(ICO 规范的上限);生成的 ico 里 128 及以上是 PNG 压缩条目,在 Windows XP 这类老系统上可能显示不出来;只处理本机文件,不做网络下载;不支持动画图标(.ani)。
操作教程
- 解压并双击 exe
把下载的 zip 全部解压到一个有写入权限的目录(不要只在压缩包里双击打开),然后双击「图片图标互转工具.exe」。
预期结果:出现主窗口,左侧是文件列表,上方有「转换方向 / 图标尺寸 / 画面处理 / 导出格式 / 输出目录」几组设置。首次打开若被浏览器或系统弹出安全提示拦住,按下方「常见问题」前四条处理(Win10 / Win11 的三类提示都写了解法)。 - 选转换方向
窗口上方「转换方向」有两个标签:图片 → 图标、图标 → 图片。点一下即切换,列表能接收的文件类型和下面的设置项会跟着变。
预期结果:切到「图片 → 图标」时显示尺寸复选框;切到「图标 → 图片」时显示导出格式(PNG / BMP / JPG)和「导出图标里的全部画面」开关。 - 把文件弄进列表
在资源管理器里选中若干文件,直接拖到窗口里;也可以点「添加文件」用系统文件对话框挑。图片方向支持 PNG / JPG / BMP / GIF / TIF,图标方向支持 .ico。
预期结果:列表里逐行出现文件名、源文件路径,状态是「待处理」;打不开的文件会标成「不可转换」,不影响其它文件继续。 - 勾图标尺寸(图片 → 图标时)
「图标尺寸」一行是 16 / 24 / 32 / 48 / 64 / 128 / 256 七个勾选框,默认勾了 32、48、64、128、256。给软件做 app.ico 建议把 16、24、32 也勾上,Windows 在任务栏、资源管理器小图标、高 DPI 下取的尺寸不一样。「画面处理」选「等比缩放(留透明边)」不会把图拉变形,选「拉伸铺满」会把非正方形图硬拉到正方形。
预期结果:一个 ico 文件里生成对应数量个画面;一个尺寸都没勾就点开始,会弹提示「先勾选要生成的图标尺寸」。 - 定输出位置
「输出目录」默认勾了「放在源文件目录」,结果就写在原图旁边。想统一放到一处,取消勾选再点「浏览…」挑一个空目录。想保留原文件同名不冲突,就别勾「覆盖同名文件」。
预期结果:输出目录填了不存在的路径会给出人话提示;同名的结果文件默认自动加 _1、_2 后缀,不会覆盖你已有的文件。 - 点「开始转换」看结果
点「开始转换」,列表逐行从「转换中」变「成功」,下方「运行日志」区滚动出每个文件的产出文件名和大小。中途要停就点「停止」。
预期结果:转完顶部汇总显示「共 N 个文件」和成功数量;点「打开输出目录」直接在资源管理器里看到生成的 ico 或图片。
图标 → 图片方向:勾选「导出图标里的全部画面」时,一个 ico 里的每个尺寸都会各导出成一张图(文件名自动带 _16、_32 这样的尺寸后缀);不勾则只导出尺寸最大的那一帧。
常见问题
技术实现与后续维护
工具由我们自己开发并持续维护,每次发布前都在干净目录里实跑一遍:程序自检 82 项断言全部通过(覆盖 ICO 头部读写、256 尺寸的字节表示、DIB 与 PNG 两种条目的往返、AND 掩码打洞、调色板 biClrUsed 偏移、缩放黑边、JPG 白底、重名自动加后缀等),再用界面手工驱动一轮真实转换作为验收。日常维护主要围绕 ICO 规范的两条边界:老图标的 AND 掩码兼容,以及各尺寸在旧系统上的可显示性。
技术构成:
UI/BodyForm.cs—— 主界面窗体:文件拖放、尺寸勾选、后台批量执行与结果列表刷新Services/IcoFile.cs—— ICO 容器读写:目录项拼装、DIB 与 PNG 压缩两种编码、AND 掩码解析Services/ImageOps.cs—— 图像操作:高质量缩放(防黑边镜像延展)、透明压白底、PNG/BMP/JPG 编码Services/ConvertService.cs—— 转换调度:逐文件执行、输出目录与重名处理、状态回调
运行环境:
运行环境为 Windows 10 / 11(64 位)+ .NET Framework 4.8(Win10 1903+ 与 Win11 系统自带)。成品是单个约 2.6 MB 的 exe,全部依赖已合并进这一个文件,不需要安装、不需要额外配置。若要在自己机器上编译:用 MSBuild 以 Release 方式生成工程,产出在 bin\Release 下,再走混淆合并步骤得到单文件成品。
可扩展方向:
- 按目标用途预置尺寸方案(比如「软件 app.ico」「网页 favicon」两套勾选组合)
- 支持递归处理整个文件夹,一次吞下一个目录树
- 把转换结果按规则自动命名(加尺寸、加日期、按原图分辨率归类)
- 生成时附带尺寸预览图,转完能一眼核对效果
本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。
需要其它功能?可以定制
这个工具只做一件事:批量把 PNG/JPG 做成一个含多尺寸的 .ico 图标,或者把 .ico 里的画面取出来,命令行工具对普通用户门槛太高,在线转换又要把自己的图片上传到别人的服务器。。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 把一批商品图统一做成 ico 并嵌进现有 WinForms 项目的资源文件
- 反过来:把一个目录里的 ico 全部拆成 PNG,按尺寸分文件夹归档
- 加一条「转完自动写入安装包资源目录并刷新项目配置」的流程
- 换成命令行批处理或加一个 Windows 右键菜单入口,配合定时任务跑
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护
使用说明与免责声明
- 本工具在本地运行,不联网、不上传任何数据到服务器。
- 涉及文件改写的功能,请在使用前备份原始文件。
- 软件完全免费,可自由使用与转发,请勿用于倒卖。
- 因误操作造成的数据问题请自行承担。
从网络上下载可执行程序时,Windows 与浏览器都会给出安全提醒(详见上方「常见问题」前四条)。请只从本站给出的下载地址获取本工具,下载后如条件允许,可核对文件的哈希值再运行;对安全提示有疑问时先备份数据、单独在测试机上试用。

