El color promedio de una imagen se puede encontrar con JavaScript dibujando la imagen en un elemento de lienzo. Se deben realizar los siguientes pasos para obtener el color promedio de una imagen:
1. Primero se dibuja la imagen en el lienzo utilizando el método context.drawImage() de la API Canvas 2D. Este método toma la imagen y las dimensiones como parámetros y la dibuja en el lienzo.
Sintaxis:
context.drawImage( img, width, height );
2. Los datos de la imagen del lienzo se devuelven mediante el método context.getImageData() . Devuelve un objeto ImageData que representa los datos de píxeles de una sección específica del lienzo.
Sintaxis:
context.getImageData( x, y, width, height )
3. Los colores promedio rojo, verde y azul se calculan luego con estos datos de imagen sumando todos los valores de color por separado y encontrando el valor promedio de ese color.
Ejemplo:
html
<!DOCTYPE html> <html lang="en"> <head> <title> Find Average Color of image via JavaScript? </title> <style> #img { position: absolute; top: 20%; left: 25%; } #block { position: absolute; background-color: white; height: 70px; width: 70px; left: 50%; top: 25%; } </style> </head> <body> <img height="100px" width="150px" id="img" src= "image_to_find_average_color.png"> <div id="block"></div> <!-- Function to find the average color --> <script> function averageColor(imageElement) { // Create the canvas element var canvas = document.createElement('canvas'), // Get the 2D context of the canvas context = canvas.getContext && canvas.getContext('2d'), imgData, width, height, length, // Define variables for storing // the individual red, blue and // green colors rgb = { r: 0, g: 0, b: 0 }, // Define variable for the // total number of colors count = 0; // Set the height and width equal // to that of the canvas and the image height = canvas.height = imageElement.naturalHeight || imageElement.offsetHeight || imageElement.height; width = canvas.width = imageElement.naturalWidth || imageElement.offsetWidth || imageElement.width; // Draw the image to the canvas context.drawImage(imageElement, 0, 0); // Get the data of the image imgData = context.getImageData( 0, 0, width, height); // Get the length of image data object length = imgData.data.length; for (var i = 0; i < length; i += 4) { // Sum all values of red colour rgb.r += imgData.data[i]; // Sum all values of green colour rgb.g += imgData.data[i + 1]; // Sum all values of blue colour rgb.b += imgData.data[i + 2]; // Increment the total number of // values of rgb colours count++; } // Find the average of red rgb.r = Math.floor(rgb.r / count); // Find the average of green rgb.g = Math.floor(rgb.g / count); // Find the average of blue rgb.b = Math.floor(rgb.b / count); return rgb; } // Function to set the background // color of the second div as // calculated average color of image var rgb; setTimeout(() => { rgb = averageColor( document.getElementById('img')); // Select the element and set its // background color document .getElementById("block") .style.backgroundColor = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')'; }, 500) </script> </body> </html>
Producción:
Publicación traducida automáticamente
Artículo escrito por parasmadan15 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA