ColorController is a Pythonic interface for managing colors by english-language name and various color values.

Overview

ColorController.py

Table of Contents

  1. Encode color data in various formats.
  2. Modify a color using simple, convenient methods.
  3. Invert a color
  4. Access a rich set of color values and color names

Welcome to the ColorController Python library!

My name is Tal Zaken, and I wrote this library for use in a natural language processing project that aims to take in free-form text, and spit out color data which somehow relates to the text's content.

Enough about that. Here are some things that you can do with ColorController:

1. Encode color data in various formats.

Example 1.1: Create a ColorController object using a familiar, english-language color name, and print out its properties.

You can set a color using a very large library of color names. See the colornames.txt document contained herein, with enormous thanks to Martin Krzywinski.

The following code:

from ColorController import ColorController

color = ColorController(name='hazel')

print(f"Name: {color.name}",
      f"Hex Code: {color.hex_code}",
      f"RGB: {color.rgb}",
      f"HSV: {color.hsv}",
      sep='\n')

outputs:

Name: hazel
Hex Code: ['#8E7618']
RGB: [(142, 118, 24)]
HSV: [(0.133, 0.831, 142)]

Further, you can change all the ColorController's properties by changing any one of them.

By example:

color.name = 'blue'

print(f"Name: {color.name}", 
      f"Hex Code: {color.hex_code}", 
      f"RGB: {color.rgb}", 
      f"HSV: {color.hsv}", 
      sep='\n')

You will see that all properties have updated:

Name: blue
Hex Code: ['#00008B', '#0000CD', '#0000EE', '#0000FF', '#0018A8', '#0087BD', '#0093AF', '#0247FE', '#0343DF', '#1F75FE', '#2242C7', '#333399']
RGB: [(0, 0, 139), (0, 0, 205), (0, 0, 238), (0, 0, 255), (0, 24, 168), (0, 135, 189), (0, 147, 175), (2, 71, 254), (3, 67, 223), (31, 117, 254), (34, 66, 199), (51, 51, 153)]
HSV: [(0.667, 1.0, 139), (0.667, 1.0, 205), (0.667, 1.0, 238), (0.667, 1.0, 255), (0.643, 1.0, 168), (0.548, 1.0, 189), (0.527, 1.0, 175), (0.621, 0.992, 254), (0.618, 0.987, 223), (0.602, 0.878, 254), (0.634, 0.829, 199), (0.667, 0.667, 153)]

Notably, the colornames.txt file has numerous entries that all share the name "blue." This is true of many colors. Because color is thought to be a culturally relative phenomenon, I have chosen to return all hex codes that match a given name. You will notice a similar phenomenon occurs for color names when you set a color using hex code, RGB, or HSV. This is because there are sometimes many names that all describe the same color.

Example 1.2: Show a color.

We've had a lot of talk about colors so far, but we haven't even seen any colors yet! Let's solve that now, and do away with these lengthy print statements:

color.hex_code ='#ffbff9'

color.show_color()

Shows:

pale_orchid

That said, the ColorController object is biased toward whatever you, the user, set it to be. If you explicitly set a name, then that will be the singular name of your object. Similarly, if you explicitly set a hex code, then that will be the value of your hex code. If you leave a leading # off of your hex code, then everything will still work, but that will be the hex code value. For example...

Example 1.3: Create a ColorController object using a hex code.

color = ColorController(hex_code='#990000')

color.show_color()

Shows:

['crimson_red', 'stizza', 'ou_crimson_red', 'usc_cardinal']

While:

color.hex_code = '990000'

color.show_color()

Shows very similar results:

['crimson_red', 'stizza', 'ou_crimson_red', 'usc_cardinal']

Example 1.4: Create a ColorController object using an RGB triplet.

You can also pass a 3-tuple whose values are each contained in range(0,256) to the rgb property. For example:

color = ColorController(rgb=(10, 255, 230))

color.show_color()

Shows:

[bright_aqua]

Example 1.5: Create a ColorController object using an HSV triplet, and print out its properties.

Lastly, you can also pass a 3-tuple whose first two values are a floating point number between 0 and 1 inclusive, and whose third value falls in range(0, 256):

color = ColorController(hsv=(0.25, 1, 255))

color.show_color()

Shows:

[chartreuse]

NOTE: While this is the HSV value format that comes included with the colorsys python standard library, it doesn't seem to be a very common format elsewhere. To match formats used in other locations, see the following functions:

def colorsys_hsv_to_hsv360(colorsys_hsv=tuple):
    """Takes an HSV triplet as provided by colorsys, and converts it to match the
    notation used in colornames.txt"""

def hsv360_to_hsvdistance(hsv360=tuple):
    """Takes an HSV triplet as provided by colorsys_hsv_to_hsv360(), and converts it to match the
    notation used in the function for calculating distance between colors."""  

2. Modify a color using simple, convenient methods.

Example 2.1: Darken a color.

You can darken a color using the darken_color() method. For example:

from ColorController import ColorController

color = ColorController(name='forest')

color.show_color()

color.darken_color()

color.show_color()

Will show the following in series:

[forest] [hunter_green]

You can also pass in a darkening_value between zero and one, to set the percent darker you'd like to go. For instance:

color = ColorController(name='cocoa')

color.show_color()

color.darken_color(.3)

color.show_color()

Shows the following in series:

[cocoa] [nutmeg]

In the above example, note that our color object was first initiated by the name property, meaning that there are lists of associated hex, rgb, and hsv values stored in their respective properties. When we lighten the color, we have to select one index from these lists to operate on. The default behavior is to operate on the first index. See the unlist() function in helpers.py.

Example 2.2: Lighten a color.

You can also pass in a lightening_value between zero and one, to set the percent lighter you'd like to go. For instance:

color = ColorController(hex_code='#6c3461')

color.show_color()

color.lighten_color(.5)

color.show_color()

Shows the following in series:

[grape] [grayish_fuchsia]

Example 2.3: Brighten a color.

3. Invert a color.

Example:

from ColorController.conversions import invert_rgb
from ColorController import ColorController


color = ColorController(hex_code='#9ffeb0')
color.show_color()

r, g, b = color.rgb
color.rgb = invert_rgb(r, g, b)
color.show_color()

Shows the following in series:

[mint] [deep_orchid]

4. Access a rich set of color values and color names (prepared by Martin Krzywinski), conveniently stored in a Pandas DataFrame.

Example:

from ColorController.ColorController import colors_df

print(colors_df.iloc[5000])

Outputs:

IDX                                                                  5000
NAME                                                    light_apple_green
rgb                                                                   rgb
R                                                                     220
G                                                                     231
B                                                                     139
hex                                                                   hex
HEX                                                               #DCE78B
hsv                                                                   hsv
h                                                                      67
s                                                                      40
v                                                                      91
xyz                                                                   xyz
X                                                                    0.63
Y                                                                    0.74
Z                                                                    0.35
lab                                                                   lab
L                                                                      89
A                                                                     -17
B                                                                      44
lch                                                                   lch
L                                                                      89
C                                                                      47
H                                                                     112
cmyk                                                                 cmyk
C                                                                       4
M                                                                       0
Y                                                                      36
K                                                                       9
NEIGHBOUR_STR           PMS586[775][226,229,132](3.6):hypnotic[4592][2...
NUM_NEIGHBOURS_MAXDE                                                    4
WORD_TAGS               [light, PMS586, hypnotic, jonquil, green, lime...
Name: 5000, dtype: object

Known Bugs:

  • I don't know of any right now, but I'm sure they exist!

Ideas

  • tint and shade methods instead of or in addition to lighten/darken?
  • more unit tests
  • module to mix colors
    • this will require converting to LAB or another subtractive space, so more getter/setter methods

Resources:

Owner
Tal Zaken
Tal Zaken
Dice Rolling Simulator using Python-random

Dice Rolling Simulator As the name of the program suggests, we will be imitating a rolling dice. This is one of the interesting python projects and wi

PyLaboratory 1 Feb 02, 2022
A primitive Python wrapper around the Gromacs tools.

README: GromacsWrapper A primitive Python wrapper around the Gromacs tools. The library is tested with GROMACS 4.6.5, 2018.x, 2019.x, 2020.x, and 2021

Becksteinlab 140 Dec 28, 2022
A string extractor module for python

A string extractor module for python

Fayas Noushad 4 Jul 19, 2022
Runes - Simple Cookies You Can Extend (similar to Macaroons)

Runes - Simple Cookies You Can Extend (similar to Macaroons) is a paper called "Macaroons: Cookies with Context

Rusty Russell 22 Dec 11, 2022
NFT-Generator is the best way to generate thousands of NFTs quick and easily with Python.

NFT-Generator is the best way to generate thousands of NFTs quick and easily with Python. Just add your files, set your configuration and run the scri

78 Dec 27, 2022
A simple example for calling C++ functions in Python by `ctypes`.

ctypes-example A simple example for calling C++ functions in Python by ctypes. Features call C++ function int bar(int* value, char* msg) with argumene

Yusu Pan 3 Nov 23, 2022
Aggregating gridded data (xarray) to polygons

A package to aggregate gridded data in xarray to polygons in geopandas using area-weighting from the relative area overlaps between pixels and polygons.

Kevin Schwarzwald 42 Nov 09, 2022
A thing to simplify listening for PG notifications with asyncpg

asyncpg-listen This library simplifies usage of listen/notify with asyncpg: Handles loss of a connection Simplifies notifications processing from mult

ANNA 18 Dec 23, 2022
A python module to update the console without flashing.

A python module to update the console without flashing.

Matthias 112 Dec 19, 2022
Check subdomains for Open S3 buckets

SuBuket v1.0 Check subdomains for Open S3 buckets Coded by kaiz3n Basically, this tool makes use of another tool (sublist3r) to fetch subdomains, and

kaiz3n 4 Dec 29, 2021
A python module to validate input.

A python module to validate input.

Matthias 6 Sep 13, 2022
python package for generating typescript grpc-web stubs from protobuf files.

grpc-web-proto-compile NOTE: This package has been superseded by romnn/proto-compile, which provides the same functionality but offers a lot more flex

Roman Dahm 0 Sep 05, 2021
✨ Un chois aléatoire d'un article sur Wikipedia totalement fait en Python par moi, et en français.

Wikipedia Random Article ❗ Un chois aléatoire d'un article sur Wikipedia totalement fait en Python par moi, et en français. 🔮 Grâce a une requète a w

MrGabin 4 Jul 18, 2021
A clock app, which helps you with routine tasks.

Clock This app helps you with routine tasks. Alarm Clock Timer Stop Watch World Time (Which city you want) About me Full name: Matin Ardestani Age: 14

Matin Ardestani 13 Jul 30, 2022
Etherium unit conversation and arithmetic library

etherunit Etherium unit conversation and arithmetic library Install pip install -u etherunit Usage from etherunit import Ether, Gwei, Wei, E Creat

Yasin Özel 1 Nov 10, 2021
Let's renew the puzzle collection. We'll produce a collection of new puzzles out of the lichess game database.

Let's renew the puzzle collection. We'll produce a collection of new puzzles out of the lichess game database.

Thibault Duplessis 96 Jan 03, 2023
Import the module and create an object of the class LocalVariable.

LocalVariable Import the module and create an object of the class LocalVariable. Call the save method with the name and the value of a variable as arg

Sajedur Rahman Fiad 2 Dec 14, 2022
An okayish python script to generate a random Euler circuit with given number of vertices and edges.

Euler-Circuit-Test-Case-Generator An okayish python script to generate a random Euler circuit with given number of vertices and edges. Executing the S

Alen Antony 1 Nov 13, 2021
Report Bobcat Status to Google Sheets

bobcat-status-reporter Report Bobcat Status to Google Sheets Why? I recently relocated my miner from my root into the attic. Bobcat recommends operati

Jasmit Tarang 3 Sep 22, 2021
Generate random german words

Generate random german words / Generiere zufällige deutsche Wörter Getting Started Pip install with pip install zufallsworte Install the library with

Maximilian Freitag 5 Mar 24, 2022