Skip to content

Instantly share code, notes, and snippets.

@facelessuser
Last active January 15, 2022 16:11
Show Gist options
  • Save facelessuser/26ff61052f1e4a180d2f98a499d08595 to your computer and use it in GitHub Desktop.
Save facelessuser/26ff61052f1e4a180d2f98a499d08595 to your computer and use it in GitHub Desktop.
Okfit
from coloraide.distance.delta_e_76 import DE76
from coloraide.gamut.fit_lch_chroma import LchChroma
from coloraide import Color as OrigColor
class DEOK(DE76):
"""Delta E OK class."""
NAME = "ok"
SPACE = "oklab"
@classmethod
def distance(cls, color, sample, scalar=1, **kwargs):
"""
Delta E OK color distance formula.
This just uses simple Euclidean distance in the Oklab color space.
"""
# Equation (1)
return scalar * super().distance(color, sample)
class OklchChroma(LchChroma):
"""Lch chroma gamut mapping class."""
NAME = "oklch-chroma"
EPSILON = 0.0001
LIMIT = 0.02
DE = "ok"
SPACE = "oklch"
SPACE_COORDINATE = "{}.chroma".format(SPACE)
class Color(OrigColor):
"""New Color."""
for c in Color("color(rec2020 0 0 0)").steps("color(rec2020 0 0 1)", steps=22, space='rec2020'):
print(c.convert('srgb', fit="oklch-chroma").to_string())
for c in Color("color(rec2020 0 0 0)").steps("color(rec2020 0 0 1)", steps=22, space='rec2020'):
print(c.convert('srgb', fit="lch-chroma").to_string())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment