Open anjia opened 5 years ago
R、G、B 各有一个 byte,所以我们要用 (2^8)^3=2^24 种颜色表示。
场景一:有种视频接口 VGA,同一时刻无法显示超过 256 种颜色。所以,我们需要将 2^24 种颜色,用 256 种颜色来表示。或者,用 n 种颜色来替代 m 种颜色(m>n)。
场景二:PNG 的压缩。PNG 有种编码方式,是使用调色板的编码方案。即使用最多 256 种颜色表示一张图片。如此,每种颜色就都可以用一个 byte 来替代了。
对于 24-bit 的图片来说,颜色空间是连续的(断的地方肉眼几乎不可见)。要将连续的颜色空间,映射到 256 种离散的颜色上,这种将连续变量映射到离散集合上就叫做量化。
颜色量化(color quantization)的方法:
算法:
说明:
https://github.com/lokesh/color-thief 用了中位切割算法
getPalette(sourceImage, colorCount=10, quality=10) 返回:[{r,g,b},{r,g,b},...,{r,g,b}]
getPalette(sourceImage, colorCount=10, quality=10)
使用中位切割算法将相似的颜色聚类
背景
R、G、B 各有一个 byte,所以我们要用 (2^8)^3=2^24 种颜色表示。
场景一:有种视频接口 VGA,同一时刻无法显示超过 256 种颜色。所以,我们需要将 2^24 种颜色,用 256 种颜色来表示。或者,用 n 种颜色来替代 m 种颜色(m>n)。
场景二:PNG 的压缩。PNG 有种编码方式,是使用调色板的编码方案。即使用最多 256 种颜色表示一张图片。如此,每种颜色就都可以用一个 byte 来替代了。
对于 24-bit 的图片来说,颜色空间是连续的(断的地方肉眼几乎不可见)。要将连续的颜色空间,映射到 256 种离散的颜色上,这种将连续变量映射到离散集合上就叫做量化。
颜色量化(color quantization)的方法:
中位切割算法
算法:
说明:
https://github.com/lokesh/color-thief 用了中位切割算法
getPalette(sourceImage, colorCount=10, quality=10)
返回:[{r,g,b},{r,g,b},...,{r,g,b}]使用中位切割算法将相似的颜色聚类