图片主色提取与配色方案

先从图里挑出一组主色,再把其中任意一个当基准色,按色轮关系展开成整套配色。

选图、粘贴或拖进来。带透明背景的图会跳过全透明像素,不会多出一块黑。所有计算都在本机完成。

选择图片后开始提取颜色

配色这件事的常识

为什么用中位切分而不是 k-means。k-means 要反复迭代、结果受初始中心影响,同一张图跑两次可能给出不同答案,在浏览器里还容易卡顿。中位切分是一次性的划分:每次挑最长边从中位数切开,结果完全确定,并且只需要统计一遍直方图。对「从照片里挑几个主色」这种需求,两者效果差别肉眼看不出来。

占比低于 0.5% 的颜色会被丢掉。照片里总有很多只占几十个像素的杂色,如果全留下列表会变得又长又没用。默认把面积不到 0.5% 的颜色过滤掉,想找画面里的点缀色(比如一小块红色招牌)就把门槛调到 0.1% 以下,或者把颜色数量调大。反过来,只要主色调就把数量调到 3、门槛调到 2%。

色轮配色在 HSL 里算会有偏差。HSL 的色相不是感知均匀的:同样加 30 度,从黄色往绿色偏的变化看起来远不如从蓝色往紫色偏那么明显,明度 50% 的黄色也远比明度 50% 的蓝色更亮。所以生成出来的配色要人工再看一眼,尤其是三角和四角这种大跨度方案。真要严谨应该换 OKLCH,但对做界面来说 HSL 已经够用。

配色好看不等于能用。每个色块下面都标了它配白色和配黑色的对比度。WCAG AA 要求正文达到 4.5:1,大字和图形元素 3:1。很多看着舒服的莫兰迪色系对比度只有 2:1 出头,直接把文字放上去在强光下的屏幕上是看不清的。做界面时应该先定对比关系,再在满足对比度的前提下挑具体色值。

提取主色前先想清楚图的用途。带大片纯色背景的商品图,主色永远是那块背景,这时候应该调大颜色数量,从第 2、第 3 位开始看。反过来,想给一张风景照做主题配色,就该用少量颜色让整体氛围浮出来。同一张图调不同的颜色数量得到的是完全不同用途的清单,没有唯一正确的答案。

色值都是 sRGB,别直接搬去印刷。浏览器读到的像素是解码后的 sRGB 值,这里输出的十六进制也是 sRGB。印刷用的是 CMYK,色域并不重合,尤其是鲜艳的青色和绿色,在纸上根本印不出来,转换后必然变暗。做印刷物料时这些色值只能当参考,最终要以打样为准。