调色板提取器

上传一张图片,提取出真正定义它的颜色。点击任意色块即可复制其十六进制色值。

点击选择图片,或将它拖放到这里

也支持粘贴(Ctrl+V)。文件留在你的设备上,不会被上传。

工作原理

颜色通过 canvas API 直接从你的图片中采样,并按相似程度分组。不会上传任何内容,一切都在你的浏览器中完成。

工作原理

你的图片会被绘制到一个离屏画布上,并缩小到最长边不超过 200px,因为缩略图与原图的颜色分布几乎一致,读取速度却快上千倍。原始 RGBA 像素数据通过 getImageData() 获取,透明度超过一半的像素会被跳过。每个剩余像素会落入一个每通道 6 级、共 216 个分组的粗粒度网格中,分组保留落入其中的真实像素值之和。按像素数量对分组排序,取前 N 名,每个色块取的是分组内真实像素的平均值,而不是分组的中心值,这样结果不会显得色阶生硬。

这种按频率排序方法的诚实局限:它衡量的是面积,而非重要性。一张米色墙壁前的人像照片,可能会在提到主体蓝色夹克之前先给出五种米色,因为墙壁的像素数量本来就更多。如果你想要的是强调色而不是主色调,可以调高颜色数量并查看列表末尾,或者在上传前先裁剪到你关心的区域。

图片本身不会离开你的设备:它通过本地对象 URL 加载,在内存中的画布上绘制,再作为字节读取,整个过程都在本页面的 JavaScript 中完成。没有可拦截的上传步骤,提取颜色时开发者工具的网络面板会始终保持空白。

常见问题

我的图片会被上传到别的地方吗?

不会。每个像素都是通过 canvas API 在本地读取的,不会发送到任何服务器。

颜色是如何被选出来的?

像素会按相似程度被归入不同分组,出现频率最高的分组组成你的调色板,每种颜色都是该分组内真实像素的平均值。

为什么提取出的颜色和我预期的不完全一样?

如果图片中非常细小的细节占比不够大,就可能在平均计算中被淹没。可以尝试增加颜色数量,以捕捉更多细节。