
There are different ways of doing this, depending of your needs, here we use the relative luminance.
There are a lot of things that we could do here but i don't want to abuse of your precious time, if you are interested in expanding a little bit the scope of the project, check the repository, it contains all the extra code. This is it, we are done with median-cut and the palette extraction. Subsequently, we check the difference between every channels min and max results and return the letter of the channel with the biggest range. Then, loop through every pixel and compare it with our current values using Math.min and Math.max. Initialize the min rgb values to the maximum number and the max rgb values to the minimum, this way we can determine what is the lowest and highest accurately. Let's begin by creating a function that finds the color channel with the biggest range.
#Color palette from image online code
It sounds easy but it is a little bit complex, so I am gonna try my best to explain the code below.
Repeat the process for each half until you have the desired number of colors. Find the color channel ( red, green or blue) in the image with the biggest range. To achieve color quantization we are gonna use an algorithm called median-cut, the process is the following: Wikipedia describes color quantization asĪ process that reduces the number of distinct colors used in an image, usually with the intention that the new image should be as visually similar as possible to the original image. Build the HTML to display the color palette.įirst we create the basic HTML of our page, we need a form input of type file to upload the image and a canvas element because that’s how we gain access to the image’s data.Įnter fullscreen mode Exit fullscreen modeĪfter building the rgb colors array we need to somehow know which colors are the most representative of the image, to obtain this we use color quantization. Create a complementary version of each color. Now that we know what we are dealing here, let’s start by explaining the process: There are several websites that provide this service such as or, if you ever wondered how does it work you are in the correct place, let's find out. We can load any image and extract a color palette and every color is accompanied by its opposed color (complementary).Įxample of a similar technique can be found in Spotify, when you navigate to a song/playlist or album you get a custom color gradient on top that represents the dominant color of the picture, this gradient adds a unique feel to each page and it's actually the reason why I am doing this post.
Repository (the entire codebase is commented).If you can’t wait and want to test it yourself, here are the links to the app demo and the repository. Let me begin by showcasing the end result. Today I am bring you something really interesting that I think is worth sharing.