调色板提取器
上传一张图片,提取出真正定义它的颜色。点击任意色块即可复制其十六进制色值。
点击选择图片,或将它拖放到这里
也支持粘贴(Ctrl+V)。文件留在你的设备上,不会被上传。
工作原理
颜色通过 canvas API 直接从你的图片中采样,并按相似程度分组。不会上传任何内容,一切都在你的浏览器中完成。
工作原理
你的图片会被绘制到一个离屏画布上,并缩小到最长边不超过 200px,因为缩略图与原图的颜色分布几乎一致,读取速度却快上千倍。原始 RGBA 像素数据通过 getImageData() 获取,透明度超过一半的像素会被跳过。每个剩余像素会落入一个每通道 6 级、共 216 个分组的粗粒度网格中,分组保留落入其中的真实像素值之和。按像素数量对分组排序,取前 N 名,每个色块取的是分组内真实像素的平均值,而不是分组的中心值,这样结果不会显得色阶生硬。
这种按频率排序方法的诚实局限:它衡量的是面积,而非重要性。一张米色墙壁前的人像照片,可能会在提到主体蓝色夹克之前先给出五种米色,因为墙壁的像素数量本来就更多。如果你想要的是强调色而不是主色调,可以调高颜色数量并查看列表末尾,或者在上传前先裁剪到你关心的区域。
图片本身不会离开你的设备:它通过本地对象 URL 加载,在内存中的画布上绘制,再作为字节读取,整个过程都在本页面的 JavaScript 中完成。没有可拦截的上传步骤,提取颜色时开发者工具的网络面板会始终保持空白。
常见问题
我的图片会被上传到别的地方吗?
不会。每个像素都是通过 canvas API 在本地读取的,不会发送到任何服务器。
颜色是如何被选出来的?
像素会按相似程度被归入不同分组,出现频率最高的分组组成你的调色板,每种颜色都是该分组内真实像素的平均值。
为什么提取出的颜色和我预期的不完全一样?
如果图片中非常细小的细节占比不够大,就可能在平均计算中被淹没。可以尝试增加颜色数量,以捕捉更多细节。