[AI Development Lab] 【deepin插件开发活动】svgs2dci (适合转制任务栏插件DCI图标)
Tofloor
poster avatar
hotime
deepin
2026-08-17 18:12
Author

svgs2dci:一键将 SVG 打包为 deepin DCI 图标

svgs2dci 是一款 deepin DCI 图标包生成工具。你只需提供亮色与暗色两套 SVG 格式的图标源文件,按图标状态(normal/disabled/hover/pressed)和色调(light/dark)进行绑定,工具会使用 DDciFile API 直接生成符合 DCI 规范的目录结构、导出相应分辨率的 WebP 图标,最终输出一个可直接使用的 .dci 文件。

功能亮点

🎨 亮/暗双色调 SVG 导入
分别导入 light 与 dark 主题的 SVG,支持四种图标状态自由组合绑定,一套素材覆盖完整交互场景。

📁 图标类型管理
内置"托盘图标"(16)与"应用图标"(16~128)两种预设类型,也支持自定义类型。自定义类型支持 长按进入删除模式、双击内联重命名,操作直观自然。

📐 尺寸与缩放灵活配置
支持 7 种图标尺寸(16~128)多选 + 3 种缩放倍数(1x/2x/3x)勾选,生成目录结构实时预览。

↕️ 拖拽导入
从文件管理器直接拖拽 SVG 文件到槽位,自动绑定当前选中的状态/色调组合。

👁️ 实时目录树预览
左侧面板随绑定状态与配置项实时刷新 DCI 目录结构,生成前即可确认结果。

🔍 DCI 图标预览
生成或导入 DCI 文件后,可实时预览图标效果,支持切换不同尺寸查看。

⚙️ 使用 DDciFile API 直接生成
通过 DDciFile API 直接构建 DCI 文件,支持跨尺寸软链接去重——相同物理分辨率只存一份 WebP,其余通过软链接指向,节省空间。

💾 目录记忆
自动记住上次使用的 SVG、输出和 DCI 目录,无需重复浏览。

🔔 Toast 提示
生成结果以 Toast 弹窗提示,不再打断操作流程。

📂 打开输出目录并定位文件
生成完成后一键打开输出目录并选中生成的 DCI 文件。

🌐 多语言支持
支持简体中文、繁體中文、香港繁體。

技术实现

  • 界面框架:Qt6 + DTK6(DMainWindow + DTitlebar),标题栏内置「关于/主题/退出」菜单
  • SVG 渲染预览:QSvgRenderer 渲染为 QPixmap,light 主题使用白底,dark 主题使用 DTK 标准深色调色板
  • 生成流程:绑定 SVG → QSvgRenderer 渲染为 QImage → 输出 WebP → DDciFile 构建 DCI 目录结构(含跨尺寸软链接去重)→ DDciFile::writeToFile() 写出最终 .dci
  • 配置持久化:QSettings 保存自定义类型名、尺寸与缩放勾选、目录记忆
  • 多语言:loadTranslator 加载翻译文件,支持 zh_CN/zh_HK/zh_TW
  • 交互细节:槽位悬停显示「-」清除按钮;长按 600ms 进入删除模式;双击内联重命名;编辑框失焦自动确认

安装

从 AtomGit Release 页面 下载最新版本的 .deb 包安装

截图

screenshot-main.png

screenshot-main-import1.png

screenshot-main-import2.png

开发过程说明

本项目全程使用 deepin Skills(dtk-development 等)辅助开发,覆盖:

  • DTK 应用框架规范(DApplication/DMainWindow/DTitlebar 初始化、About 对话框元信息、loadTranslator 翻译加载)
  • DCI 图标规范与 DDciFile API 调用链路
  • 关键排错记录:DAboutDialog 主页显示问题分析(setApplicationHomePage() 与 setWebsiteLink() 独立路径,需手动设置 About 对话框的网站链接覆盖默认 www.deepin.org)
  • DTK6 适配(DTK_VERSION_CHECK 条件编译、头文件路径、Qt6 兼容性)

11.png

12.png

13.png

源码与协议

🧩 开发花絮:从需求到工具

这个工具的诞生,其实源于同时期开发的另一个任务栏插件——dde-dock-reboot-plugin。

在开发任务栏插件时,我需要为插件准备一个支持系统亮/暗主题自动切换的托盘图标。根据 deepin 的 DCI 图标规范,这需要将分别设计的 light 和 dark 两套 SVG 图标,按照 DCI 格式打包成一个 .dci 文件。

但在当时,我并没有找到一款能够直观导入两套 SVG、并一键生成 DCI 文件的图形化工具。为了不阻塞插件开发进度,遂用 AI 快速搭建了 svgs2dci 的 Demo 版本,临时解决了这个"最后一公里"的图标打包需求。

Reply Favorite View the author
All Replies
avatar
骑🐖追帅哥bot
Moderator
2026-08-17 23:11
#1

Reply View the author
avatar
𰻞𰻝面
deepin
2026-08-18 01:32
#2

agree

太需要了,一直想改图标,搜索一圈不知道怎么弄,这简直是雪中送炭!

Reply View the author
avatar
Ligocut光剪视频剪辑软件
deepin
Backbone of ecological co-construction group
2026-08-18 03:09
#3

可以把桌面图标做成可动的吗?就好像苹果的时钟图标一样根据实际的时间变化指针

Reply View the author
avatar
deepin-superuser
deepin
2026-08-18 08:15
#4

这个可以

Reply View the author
avatar
一头牛
deepin product team
2026-08-18 09:51
#5

代表牛氏家族,向你表示牛牛牛

Reply View the author
avatar
mhduiy
deepin
2026-09-10 13:34
#6

也可以做成动态的

https://github.com/linuxdeepin/deepin-specifications/blob/master/unstable/%E5%9B%BE%E6%A0%87%E6%96%87%E4%BB%B6%E8%A7%84%E8%8C%83.md#%E5%9B%BE%E6%A0%87%E5%8A%A8%E7%94%BB

Reply View the author