gpt4 book ai didi

javascript - 如何使用 javascript 从图像中获取平均颜色或主颜色?

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:36 26 4
gpt4 key购买 nike

我想要的是从图像到另一个 div 背景这种颜色的 HEX 或 RGB 平均值。

因此,如果我上传一张带有一点红色的图片,我会得到类似 #FF0000 的内容,例如。

让我知道这是否可行:)

非常感谢。

最佳答案

首先,在 canvas 上绘制图像:

function draw(img) {
var canvas = document.createElement("canvas");
var c = canvas.getContext('2d');
c.width = canvas.width = img.width;
c.height = canvas.height = img.height;
c.clearRect(0, 0, c.width, c.height);
c.drawImage(img, 0, 0, img.width , img.height);
return c; // returns the context
}

您现在可以遍历图像的像素。一种简单的颜色检测方法是简单地计算图像中每种颜色的频率。

// returns a map counting the frequency of each color
// in the image on the canvas
function getColors(c) {
var col, colors = {};
var pixels, r, g, b, a;
r = g = b = a = 0;
pixels = c.getImageData(0, 0, c.width, c.height);
for (var i = 0, data = pixels.data; i < data.length; i += 4) {
r = data[i];
g = data[i + 1];
b = data[i + 2];
a = data[i + 3]; // alpha
// skip pixels >50% transparent
if (a < (255 / 2))
continue;
col = rgbToHex(r, g, b);
if (!colors[col])
colors[col] = 0;
colors[col]++;
}
return colors;
}

function rgbToHex(r, g, b) {
if (r > 255 || g > 255 || b > 255)
throw "Invalid color component";
return ((r << 16) | (g << 8) | b).toString(16);
}

getColors 返回颜色名称和计数的映射。跳过透明像素。从这张 map 中获取最常见的颜色应该是微不足道的。

如果您真的想要每个颜色分量的平均值,您也可以从 getColors 的结果中轻松获得它,但结果不太可能是很有用。 This answer解释了一种更好的方法。

你可以像这样使用它:

// nicely formats hex values
function pad(hex) {
return ("000000" + hex).slice(-6);
}

// see this example working in the fiddle below
var info = document.getElementById("info");
var img = document.getElementById("squares");
var colors = getColors(draw(img));
for (var hex in colors) {
info.innerHTML += "<li>" + pad(hex) + "->" + colors[hex];
}

查看 working example .

关于javascript - 如何使用 javascript 从图像中获取平均颜色或主颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com