ZeroTool Workbench
图像配色提取
从任意图片提取主色调色板,浏览器内 k-means 算法运算,输出 HEX/RGB/HSL/OKLCH,附 CSS 变量与 Tailwind 配置。零上传,纯客户端。
这个工具能做什么
把任何图片——UI 设计稿、品牌素材、产品摄影、库存图——拖进来,得到一份可以直接粘贴到样式表、设计 token 或 Tailwind 主题里的调色板。工具用 k-means 对可见像素聚类,每个聚类输出一块色卡,附带它在原图中的占比,以及四种颜色空间表达:用于设计软件的 HEX、用于传统 CSS 的 RGB / HSL,以及用于现代色彩管线的 OKLCH。
使用方法
- 把图片拖到上传卡片上,或点击卡片选择文件,或者复制图片后用
Ctrl + V直接粘贴。 - 调节控件:选择要提取的颜色数量(3 到 16),按出现频率、色相或亮度排序,按需勾选「跳过透明像素」「跳过接近白色」。
- 点击任意色块复制它的 HEX。点击色块下方的 RGB / HSL / OKLCH 行可以复制对应格式。
- 整组复制:复制 CSS 变量 输出
:root { --color-1: …; }代码块;复制 JSON 输出{hex, rgb, weight}数组;复制 Tailwind 输出theme.extend.colors.palette配置片段,方便直接接入 tailwind.config.js。
算法说明
k-means 是最简单但仍能产出可用调色板的聚类方法。图片先按最长边降到 200 像素——一张 4K 照片大约会被压成 4 万个采样像素,这个量级既能让聚类中心稳定,又能在主流笔记本上保持 100 毫秒内的运行时间。每个像素归到欧式 RGB 距离最近的中心,中心更新为所属聚类的均值,循环到中心不再移动(或 24 轮迭代,以先到的为准)。
在此基础上做了两个工程化优化:聚类间 ΔRGB < 6 的近似中心会被合并,避免输出几乎相同的色卡;可选的预过滤会丢弃透明像素与接近纯白的像素(亮度 > 0.95),让算法聚焦在真正承载视觉重量的颜色上,而不是被边缘留白带偏。
输出格式说明
- HEX:通用互通格式,点击色卡上半部分直接复制。
- RGB:现代空格分隔语法
rgb(160 90 44),所有现代浏览器都支持。 - HSL:方便在不离开色卡的情况下对色相 / 饱和度 / 亮度做小调整。
- OKLCH:感知均匀,适合用作设计 token;做色相旋转或互调时不会出现 HSL 那种亮度跳变。
- 占比:每个聚类在原图像素中的占比;占比最高的通常用作品牌主色,其余作为辅助色。
典型使用场景
- 从客户提供的品牌物料(海报、产品图、网页截图)反推主色调。
- 把摄影作品转译成网页设计 token,做摄影师作品集或电商详情页。
- 开发竞品分析时,对照自家产品和竞品 banner 的色彩占比差异。
- 给文章配图前,先抽出图片调色板,再据此选择对比度合规的标题、引言色。
隐私
所有处理都在浏览器内完成。图片解码到 HTMLImageElement,绘制到隐藏的 Canvas,再用 JavaScript 跑聚类。任何关于图片的字节都不会发到服务器。要验证可以打开开发者工具的网络面板,每次加载新图片时都能看到一份干净的请求日志。
相关工具
FAQ
工具是怎么提取主色的?
对降采样后的像素 RGB 值跑 k-means 聚类。图片先被缩到最长边 200 像素,对每个可见像素按欧式 RGB 距离归到 k 个聚类中心,输出每个聚类的均值颜色与它在原图中的占比。
上传的图片会被发到服务器吗?
不会。图片由浏览器的 FileReader 与 Canvas 在本地解码,k-means 完全在 JavaScript 中跑。打开开发者工具的网络面板查看——除工具自己的页面资源外,没有任何上传请求。
支持哪些图片格式?
凡是浏览器能通过 `<img>` 元素和 Canvas 解码的格式都支持:常见的 JPEG、PNG、WebP、GIF、SVG、BMP,以及 Chromium 上的 AVIF 与 Safari 上的 HEIC。相机 RAW 格式浏览器无法直接解码,请先在本地转换为 JPEG 或 PNG。
为什么两次提取的结果可能不一样?
k-means 的初始聚类中心是随机选取的。色彩复杂的图片配上较小的 `k`,两次运行可能收敛到略有不同的结果。点击「重新提取」换一组随机种子,或调高 `k`,让更多聚类中心覆盖色彩空间,结果会更稳定。