@thi.ng/pixel-dominant-colors
Version:
k-means based dominant color extraction from images/pixel buffers
20 lines (19 loc) • 807 B
JavaScript
import { computeCutWith } from "@thi.ng/k-means/mean-cut";
import { mean, vmean } from "@thi.ng/vectors/mean";
import { vmedian } from "@thi.ng/vectors/median";
import { filterSamples } from "./utils.js";
const dominantColorsMeanCut = (img, num, opts) => __dominantColors(vmean, img, num, opts);
const dominantColorsMedianCut = (img, num, opts) => __dominantColors(vmedian, img, num, opts);
const __dominantColors = (cut, img, num, opts) => {
const samples = opts?.filter ? filterSamples(opts.filter, img) : [...img];
return samples.length ? computeCutWith(cut, samples, samples[0].length, num).sort((a, b) => b.length - a.length).map(
(bin) => ({
color: mean([], bin),
area: bin.length / samples.length
})
) : [];
};
export {
dominantColorsMeanCut,
dominantColorsMedianCut
};