PngToIco — 本机 PNG 转多尺寸 ICO

本机 PNG 转多尺寸 ICO。Qt 三层壳(PngToIco.exe → PngToIcoUI.dll → PngToIcoCore.dll),Core 零 Qt、纯 C ABI 3,WIC 解码缩放后写出内嵌 9 档尺寸的图标;文件不出本机。

本机 PNG → ICO 转换台。Qt 三层壳(PngToIco.exe → PngToIcoUI.dll → PngToIcoCore.dll),Core 零 Qt、纯 C ABI 3。拖入一张图,得到内嵌 9 档标准尺寸的图标文件;图像不上传、不需要账号。


一、软件概览

PngToIco 面向网站与桌面开发:把 Logo PNG 做成 favicon.ico、快捷方式、文件夹图标或安装包图标。对标 pngtoico.com 的核心转换,做成 Windows 本机工具,而不是再做一份营销落地页。

当前产品边界:

首版不做网址贴链转换、自定义尺寸、像素编辑、从 ICO 拆回 PNG,也不做云同步与账号。仅 Windows 桌面,固定浅色。

转换台

转换台:左队列、右原图与 9 档预览;拖入后自动写出内嵌 9 档的 ICO

转换台空态

空态:从左侧拖入或点选 PNG,转换会自动开始


二、主要功能

2.1 窗口与侧栏

无边框窗口。侧栏三组:转换、文件、系统。底栏不抢视线,状态在转换台自己的条上。

区域 说明
标题栏 品名、版本、最小 / 最大 / 关闭
侧栏 转换台、输出与最近、设置 / 帮助 / 关于
转换台底栏 空闲 / 转换中 / 就绪、成功数、失败数、当前输出路径、文件不出本机

2.2 转换台

主战场。左侧队列,右侧原图 + 3×3 九宫格。选中队列项切换预览。

共同能力:

源图建议 256×256 或更大的方形 PNG,边缘更利落。

2.3 输出与最近

输出目录的唯一编辑处。设置页不重复改目录。

输出与最近

输出与最近:当前目录可更改 / 打开;点成功记录回到转换台继续处理

能力 说明
更改 选本机文件夹并记住
打开 在资源管理器中打开当前目录
最近表 文件名、输出目录、时间、成功 / 失败
点成功行 回到转换台并选中对应任务
点失败行 提示无法打开预览

2.4 设置

只处理保存策略与本机限制。

设置

设置:覆盖 / 跳过 / 自动重命名;覆盖策略与最近记录只保存在本机

单文件上限 20 MB,单次最多 50 个。改策略后弹出提示对话框。

2.5 帮助

用通俗中文说明 ICO 是容器、9 档用途、如何当 favicon、PNG 与 ICO 的差别,以及目前不支持什么。

帮助

帮助:ICO 是什么、9 档用途表、favicon 写法、文件不出本机

把结果命名为 favicon.ico 放到网站根目录,并在 HTML 的 <head> 里写:

<link rel="icon" type="image/x-icon" href="/favicon.ico">

多数浏览器在根目录找到 favicon.ico 时也会自动使用。

2.6 关于

产品边界与隐私说明,不列 DLL 清单给最终用户看。

关于

关于:9 档尺寸 · 文件不出本机;图像不上传、不加任何水印


三、使用流程示例

示例 1:一张 Logo 出 favicon

  1. 打开转换台,拖入或点选一张 ≥ 256×256 的方形 PNG
  2. 右侧确认 16 到 256 共 9 格都已生成
  3. 点「保存 ICO」,按当前覆盖策略写入输出目录
  4. 把文件改名为 favicon.ico 放到网站根目录,加上面的 <link>

示例 2:改输出目录再继续

  1. 打开「输出与最近」,点「更改」选目标文件夹
  2. 回到转换台,保存会写到新目录
  3. 点最近表里的成功行,可回到转换台继续另存或打开文件夹

示例 3:已有文件怎么处理

  1. 打开设置,选覆盖 / 跳过 / 自动重命名
  2. 转换台再保存一次;对话框会说明是覆盖、跳过还是改成了 name (2).ico

四、从占位到真实编码

转换台先有页面和队列,编码一度只写占位图标。现在解码、缩放、写 9 档 ICO 都走同一套 Core。

维度 占位阶段 现在
解码 / 缩放 假预览或空字节 Windows WIC 读 PNG,高质量立方缩放
非方形 文案说明 透明画布居中,不拉伸
写出 ICO stub 图标 32bpp DIB(XOR + AND),256 边长按格式存 0
保存 再编一份假文件 convert 缓存,save_ico 按覆盖策略落盘
配置 注册表 QSettings exe 旁 pngtoico.db 的 KV
Ui 职责 兼做「假引擎」 只做队列、预览和提示

产品叙事从「能点的壳」收到「本机转换台,编码关在零 Qt 的 Core 里」。


五、工程架构

PngToIco.exe  →  PngToIcoUI.dll  →  PngToIcoCore.dll
  (loader)         (Host run)          (零 Qt / C ABI 3)
       └──────── →  Upgrade.dll(仅壳加载)

三条硬边界:

  1. 不链接任何插件导入库,只认中性 Host ABI(sdtech_qt_ui_host_run
  2. Ui 只做窗口、页面与主题;经 CoreClient 调 Core,不写编码器
  3. Core 禁止 Qt;WIC 编解码、ICO 容器、sqlite KV 都在这里

Ui ↔ Core 是 C 函数表:create / destroy / kv_* / convert / save_ico / export_zip / open_folder。ABI 版本为 3

落盘大致是:

位置 内容
pngtoico.db Core 内 KV(settings.outDir / settings.overwrite / settings.recent
输出目录 用户保存的 .ico(默认「图片 / PngToIco」)
Function/prebuilt Qt 依赖以外的本树预编译库

依赖只认本树 Function/prebuilt。CMake 不写工作目录外盘符,不在本树编 SDK、不跑 vcpkg。


六、技术栈与构建

说明
语言 C++(Core / Ui)
UI Qt 6 Widgets(sdtech::ui
构建 CMake,MSVC 2022 x64,源码树内生成 Function/PngToIco.sln
Core Windows WIC(windowscodecs + ole32);sqlite3 KV
测试 GTest(编码 / 居中 / Core 调用)+ Qt Test(页面 offscreen)

Function 目录配置并编译,产出在 Function/bin/。链 DLL 前若 PngToIco.exe 仍在跑,先结束进程,否则 MSVC 会 LNK1168。

日常 Debug:

cd Function
cmake --build . --config Debug --target PngToIcoUI

改 Core 后同样要先退出再编 PngToIcoCore


七、下载

版本 说明 下载链接
绿色版 解压即用 待补充
源码包 Qt 工程源码 待补充

解压密码:1150


八、系统要求


九、结语

PngToIco 适合把一张 Logo 在本机做成可用的多尺寸 ICO:拖进去、看 9 档、保存、打开目录。编码留在零 Qt 的 Core,界面只负责队列、预览和本机文件。若有功能建议,欢迎反馈。