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. Probably the most relevant information is the [RESULT]-section that contains the extracted colors in RGB values and their occurrence rate presented in percentages.

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

When the application is done it will also create an image in the directory where the command was executed. The image will contain the colors that where extracted sorted based on their occurrence rate, wrapping from from left to right. The image will use the name of the original image appended with a time stamp of when the execution took place.

Output based on gameboy.png:

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

3 Additional Options

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

usage: extcolors [-h] [--version] [-t [N]] [-l [N]] [-o {all,image,text}] 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 also bypass all
                        conversion. Defaults to 32.
  -l [N], --limit [N]   Upper limit to the number of extracted colors
                        presented in the output.
  -o {all,image,text}, --output {all,image,text}
                        Format(s) that the extracted colors should presented
                        in.

4 Known Issues

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-0.2.0.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

extcolors-0.2.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: extcolors-0.2.0.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for extcolors-0.2.0.tar.gz
Algorithm Hash digest
SHA256 905043eceea27771be1b51ccc78c142cf55d3821ef70b08345dc3615050358a3
MD5 aa3eed263f2935855f91794c922103f3
BLAKE2b-256 903f027b8e2932dfcf6b4c1fb629502006c33b2a266dcfc7b5663abf2c584bac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: extcolors-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 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/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for extcolors-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e0cdc6b0bc4c258b2838db0df5f85a6021c6795cdc8ae8c4f98d8126909864f
MD5 b759af847a16c820d6ab13832f916961
BLAKE2b-256 1350f2a4da72c568274d90a774a3f2f30fb713de805284d63d3c7978ae7f832c

See more details on using hashes here.

Supported by

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