diff --git a/tcolour/Colourimetry.py b/tcolour/Colourimetry.py index eae0f05..0d70731 100644 --- a/tcolour/Colourimetry.py +++ b/tcolour/Colourimetry.py @@ -1,5 +1,4 @@ from enum import Enum -from tcolour import TransferCharacteristic as tc class RGBPrimaries(): """Defines a set of three RGB primaries using the CIE xy coordinate system.""" @@ -37,7 +36,7 @@ class Colourimetry: """ def __init__(self, descriptor:str="", rgb_primaries:RGBPrimaries=RGBPrimaries(), achromatic:list=[], - transfer_characteristic:tc.TransferCharacteristic=None, hints:list=[], alias:list=[], + transfer_characteristic=None, hints:list=[], alias:list=[], cie_version:CIEVersion=None) -> None: self.descriptor = descriptor self.primaries = rgb_primaries @@ -69,26 +68,3 @@ def __repr__(self) -> str: return "Colourimetry(descriptor=%r,primaries=%r, achromatic=%r, transfer_characteristic=%r, hints=%r, alias=%r, cie_version=%r)" \ % (self.descriptor, self.primaries, self.achromatic, self.transfer_characteristic, self.hints, self.alias, self.cie_version) - -if __name__ == "__main__": - col = Colourimetry() - print(col.__doc__) - - col.descriptor = "sRGB" - - col.primaries.r = [0.64, 0.33] - col.primaries.g = [0.3, 0.6] - col.primaries.b = [0.15, 0.06] - - col.achromatic = [0.3127, 0.329] - - col.transfer_characteristic = tc.TransferCharacteristicPower(parameters={'a': 2.2}) - col.hints.append("value") - col.alias.append("value") - - col.cie_version = CIEVersion.CIE_1931_2_DEGREE - - print(col.colourspace_valid()) - - print(repr(col)) - diff --git a/tcolour/tcolour.py b/tcolour/tcolour.py new file mode 100644 index 0000000..1391b7c --- /dev/null +++ b/tcolour/tcolour.py @@ -0,0 +1,75 @@ +import yaml +import Colourimetry + +class TColor(): + """Contains a set of known colour spaces. Allows for interacting with and + adding or removing colour spaces""" + + def __init__(self) -> None: + self.config = {} + + def RGBPrimaries_from_YAML(self, yaml_input) -> Colourimetry.RGBPrimaries: + try: + red = yaml_input["Red"] + green = yaml_input["Green"] + blue = yaml_input["Blue"] + + primaries = Colourimetry.RGBPrimaries(list(red.values()), list(green.values()), list(blue.values())) + + return primaries + except KeyError as e: + print("YAML ERROR: ", e) + + + def parse_data(self, data:list): + """Parse the YAML data""" + for id, idx in enumerate(data): + new_colourimetry_set = Colourimetry.Colourimetry() + name = list(data[id].keys())[0] + colour_space = data[id][name] + + new_colourimetry_set.descriptor = name + + if "RGB Primaries" in colour_space: + primaries = colour_space["RGB Primaries"] + if type(primaries) is dict: + new_colourimetry_set.primaries = self.RGBPrimaries_from_YAML(primaries) + else: + new_colourimetry_set.primaries = primaries + + if "Achromatic Centroid" in colour_space: + new_colourimetry_set.achromatic = colour_space["Achromatic Centroid"] + + if "Transfer Characteristic" in colour_space: + new_colourimetry_set.transfer_characteristic = colour_space["Transfer Characteristic"] + + if "Hints" in colour_space: + new_colourimetry_set.hints = colour_space["Hints"] + + if "Alias" in colour_space: + new_colourimetry_set.alias = colour_space["Alias"] + + if "CIE Version" in colour_space: + new_colourimetry_set.cie_version = colour_space["CIE Version"] + + self.config[str(name)] = new_colourimetry_set + + + + + def add_colour_space(self, colour_space): + """Add a colour space to the config as either a file or a string""" + + with open(colour_space, 'r') as file: + data = yaml.safe_load(file) + self.parse_data(data) + + + +if __name__ == "__main__": + config = TColor() + + config.add_colour_space("..\\tests\\files\\tcolor_test.yaml") + + for key, value in config.config.items(): + print(key, value) \ No newline at end of file