ZeroTool Workbench

图像配色提取

从任意图片提取主色调色板,浏览器内 k-means 算法运算,输出 HEX/RGB/HSL/OKLCH,附 CSS 变量与 Tailwind 配置。零上传,纯客户端。

100% 浏览器端运行 数据不离开你的设备 免费 · 无需注册

把图片拖到此处,点击选择,或粘贴 (Ctrl+V)

JPG · PNG · WebP · GIF · SVG · BMP

纯浏览器端运行 — 图片不会离开你的设备

这个工具能做什么

把任何图片——UI 设计稿、品牌素材、产品摄影、库存图——拖进来,得到一份可以直接粘贴到样式表、设计 token 或 Tailwind 主题里的调色板。工具用 k-means 对可见像素聚类,每个聚类输出一块色卡,附带它在原图中的占比,以及四种颜色空间表达:用于设计软件的 HEX、用于传统 CSS 的 RGB / HSL,以及用于现代色彩管线的 OKLCH。

使用方法

  1. 把图片拖到上传卡片上,或点击卡片选择文件,或者复制图片后用 Ctrl + V 直接粘贴。
  2. 调节控件:选择要提取的颜色数量(3 到 16),按出现频率、色相或亮度排序,按需勾选「跳过透明像素」「跳过接近白色」。
  3. 点击任意色块复制它的 HEX。点击色块下方的 RGB / HSL / OKLCH 行可以复制对应格式。
  4. 整组复制:复制 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`,让更多聚类中心覆盖色彩空间,结果会更稳定。