Skip to main content

Extract colors from an image. Colors are grouped based on visual similarities using the CIE76 formula.

Project description

Command-line tool to extract colors from an image. The result will presented in two formats, text and image.

The text result will provide the usage of each color in the number of pixels and percentage. While the image will provide a palette for a visual representation.

1 Installation

1.1 Package

$ pip install extcolors

1.2 Manually

  1. Download repository as zip.

  2. Unpack zip into folder.

  3. Enter folder.

  4. Run the following command:

    $ pip install .

2 Usage

2.1 Input - Console

To use the application provide a path to the image that the application should extract colors from. In the following example the image is in the folder we are executing the command and the name of the image is gameboy.png:

$ extcolors gameboy.png

In this example gameboy.png refers to the following image created by Rebecca Machamer.

http://cairns.se/extcolors/gameboy.png

2.2 Input - Script

To use the application provide a path to the image that the colors should be extracted from. In the following example the image is in the folder we are executing the command and the name of the image is gameboy.png:

>>> import extcolors
>>> colors, pixel_count = extcolors.extract_from_path("gameboy.png")
>>> print(colors)
[((0, 172, 170), 386062), ((245, 245, 245), 59559), ((82, 90, 92), 17824), ((102, 184, 52), 15080), ((236, 27, 111), 1302), ((255, 180, 0), 137), ((241, 148, 185), 36)]

There is also the option to use an image already loaded through pillow.

>>> import extcolors
>>> import PIL
>>> img = PIL.Image.open("gameboy.png")
>>> colors, pixel_count = extcolors.extract_from_image(img)
>>> print(colors)
[((0, 172, 170), 386062), ((245, 245, 245), 59559), ((82, 90, 92), 17824), ((102, 184, 52), 15080), ((236, 27, 111), 1302), ((255, 180, 0), 137), ((241, 148, 185), 36)]

2.3 Output - Text

When the application is done it will output information about the execution. The information contains the extracted colors presented in the RGB color space along with their occurrence rate.

Output based on gameboy.png:

Extracted colors:
(0, 172, 170)  :  80.43% (386062)
(245, 245, 245):  12.41% (59559)
(82, 90, 92)   :   3.71% (17824)
(102, 184, 52) :   3.14% (15080)
(236, 27, 111) :   0.27% (1302)
(255, 180, 0)  :   0.03% (137)
(241, 148, 185):   0.01% (36)

Pixels in output: 480000 of 480000

2.4 Output - Image

Optionally when the application is done it can create an image which will contain the colors that where extracted sorted based on their occurrence rate, wrapping from from left to right.

If a name is provided that will be used otherwise the image will use the name of the original image along with an appended time stamp.

$ extcolors gameboy.png --image gameboy-palette
http://cairns.se/extcolors/gameboy-result-default.png

2.5 Output - GIMP Color Palette

Optionally when the application is done it can create a GIMP color palette. The colors that where extracted will sorted based in the palette based on their occurrence rate.

If a name is provided that will be used for both the palette within the file as well as the filename. If a name isn’t provided the palette will use the name of the original image and the file will use the original name along with an appended time stamp.

$ extcolors gameboy.png --gpl "GameBoy Palette"

3 Additional Options

Generated output from the command-line argument extcolors --help.

usage: extcolors [-h] [--version] [-t [N]] [-l [N]] [-s] [-i [NAME]] [-g [NAME]] PATH

Extract colors from a specified image. Colors are grouped based on visual
similarities using the CIE76 formula.

positional arguments:
  PATH

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -t [N], --tolerance [N]
                        Group colors to limit the output and give a
                        better visual representation. Based on a
                        scale from 0 to 100. Where 0 won't group any
                        color and 100 will group all colors into one.
                        Tolerance 0 will bypass all conversion.
                        Defaults to 32.
  -l [N], --limit [N]   Upper limit to the number of extracted
                        colors presented in the output.
  -s, --silence         Silences the default output. Doesn't effect
                        any other output option.
  -i [NAME], --image [NAME]
                        Output the result to an image palette.
                        A name for the file can be supplied.
  -g [NAME], --gpl [NAME]
                        Output the result to a GIMP color palette (GPL).
                        A name for the palette can be supplied.

4 Known Issues

4.1 Transparency

The support for images with transparency is limited. Colors that are fully transparent will be filtered out and will not be counted towards the colors in the result. Colors that have any level of transparency other than zero will be kept but the transparency will not be considered when comparing colors. If a more accurate result is desired the recommendation would be to apply a background color and perform a blend in an external application before extracting the colors.

4.1.1 Example - Full Transparency

The following image is 64 by 64 pixels large. The image consists of a border that is eight pixels wide and a fully transparent center.

http://cairns.se/extcolors/example_fully_transparent.png

Extracting colors from the image results in following where one can observe how the fully transparent pixels are removed from the percentage count.

Extracted colors:
(34, 32, 52)   : 100.00% (1792)

Pixels in output: 1792 of 4096

4.1.2 Example - Partial Transparency

The following image is 64 by 64 pixels large. The image consists of a border that is eight pixels wide and a center that has the same color as the border but with the alpha value set to 50% transparency.

http://cairns.se/extcolors/example_partially_transparent.png

Extracting colors from the image results in following where one can observe how the semi transparent color has been combined with the fully opaque color as the transparency was disregarded when the two colors were compared.

Extracted colors:
(34, 32, 52)   : 100.00% (4096)

Pixels in output: 4096 of 4096

4.2 Performance

When an image contains a large amount of different colors, which most do, the performance slows to a halt. If the grouping of colors is not desired/required then a workaround is to set the tolerance levels to zero. Setting the tolerance to specifically zero will make the application skip any comparisons from being made and become a simple counter resulting in much greater speeds.

Example, an image (3840x2160) containing about 340k unique colors will take two hours to complete with a tolerance level of 32 (the default value). However with a tolerance level of zero it will take ten seconds.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

extcolors-1.0.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

extcolors-1.0.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file extcolors-1.0.0.tar.gz.

File metadata

  • Download URL: extcolors-1.0.0.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.9.0

File hashes

Hashes for extcolors-1.0.0.tar.gz
Algorithm Hash digest
SHA256 14e81457f98555ba36c07a5dde677d1d555e8f4b75633a4fad42df30a27c4f27
MD5 a09c03543c2ad5c85d9056de35d097c6
BLAKE2b-256 fd3e47e48ba0737c1bad19f4134a4b8e00f80701d32de55d3566d64cd20cb013

See more details on using hashes here.

File details

Details for the file extcolors-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: extcolors-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.9.0

File hashes

Hashes for extcolors-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 92bfcd137c415ca1a3463feaa75f4189a7607f5bdf78dfd6a3e924be09e5ab14
MD5 c13ed21a7f43ba856d6092dc86665475
BLAKE2b-256 5761b912f519502cd8e2ef590546dcbbd5b853eae33782a367c074bbf63304ef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page