def test_write_LUT(self): """Test :func:`colour.io.luts.__init__.write_LUT` definition.""" LUT_1_r = read_LUT( os.path.join(LUTS_DIRECTORY, "sony_spi1d", "eotf_sRGB_1D.spi1d")) write_LUT( LUT_1_r, os.path.join(self._temporary_directory, "eotf_sRGB_1D.spi1d"), ) LUT_1_t = read_LUT( os.path.join(self._temporary_directory, "eotf_sRGB_1D.spi1d")) self.assertEqual(LUT_1_r, LUT_1_t) write_LUT( LUTSequence(LUT_1_r), os.path.join(self._temporary_directory, "eotf_sRGB_1D.spi1d"), ) self.assertEqual(LUT_1_r, LUT_1_t) LUT_2_r = read_LUT( os.path.join( LUTS_DIRECTORY, "resolve_cube", "Three_Dimensional_Table_With_Shaper.cube", )) write_LUT( LUT_2_r, os.path.join( self._temporary_directory, "Three_Dimensional_Table_With_Shaper.cube", ), ) LUT_2_t = read_LUT( os.path.join( self._temporary_directory, "Three_Dimensional_Table_With_Shaper.cube", )) self.assertEqual(LUT_2_r, LUT_2_t)
def make_transforms(transform_path, config): sRGB_domain = numpy.array([0.0, 1.0]) sRGB_tf_to_linear_LUT = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_decoding( colour.LUT1D.linear_table(1024, sRGB_domain)), name="sRGB to Linear", domain=sRGB_domain, comments=["sRGB CCTF to Display Linear"]) sRGB_linear_to_tf_LUT = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_encoding( colour.LUT1D.linear_table(8192, sRGB_domain)), name="Linear to sRGB", domain=sRGB_domain, comments=["sRGB Display Linear to CCTF"]) path = os.path.join(transform_path, "sRGB_CCTF_to_Linear.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_tf_to_linear_LUT, path=path, decimals=10) path = os.path.join(transform_path, "sRGB_Linear_to_CCTF.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_linear_to_tf_LUT, path=path, decimals=10) # Off-domain 1D variant sRGB_domain_variant = numpy.array([-0.125, 4.875]) sRGB_tf_to_linear_LUT_variant = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_decoding( colour.LUT1D.linear_table(1024, sRGB_domain_variant)), name="sRGB to Linear Variant", domain=sRGB_domain_variant, comments=["sRGB CCTF to Display Linear"]) sRGB_linear_to_tf_LUT_variant = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_encoding( colour.LUT1D.linear_table(8192, sRGB_domain_variant)), name="Linear to sRGB Variant", domain=sRGB_domain_variant, comments=["sRGB Display Linear to CCTF"]) path = os.path.join(transform_path, "sRGB_CCTF_to_Linear_variant.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_tf_to_linear_LUT_variant, path=path, decimals=10) path = os.path.join(transform_path, "sRGB_Linear_to_CCTF_variant.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_linear_to_tf_LUT_variant, path=path, decimals=10) # Define the sRGB specification colourspace = PyOpenColorIO.ColorSpace(family="Colourspace", name="sRGB Colourspace") colourspace.setDescription("sRGB IEC 61966-2-1 Colourspace") colourspace.setBitDepth(PyOpenColorIO.Constants.BIT_DEPTH_F32) colourspace.setAllocationVars([0.0, 1.0]) colourspace.setAllocation(PyOpenColorIO.Constants.ALLOCATION_UNIFORM) transform_to = PyOpenColorIO.FileTransform( "sRGB_CCTF_to_Linear.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) transform_from = PyOpenColorIO.FileTransform( "sRGB_Linear_to_CCTF.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) colourspace.setTransform( transform_to, PyOpenColorIO.Constants.COLORSPACE_DIR_TO_REFERENCE) colourspace.setTransform( transform_from, PyOpenColorIO.Constants.COLORSPACE_DIR_FROM_REFERENCE) config.addColorSpace(colourspace) # Define the sRGB specification for the variation colourspace = PyOpenColorIO.ColorSpace(family="Colourspace", name="sRGB Colourspace Variant") colourspace.setDescription("sRGB IEC 61966-2-1 Colourspace variant") colourspace.setBitDepth(PyOpenColorIO.Constants.BIT_DEPTH_F32) colourspace.setAllocationVars([-0.125, 1.125]) colourspace.setAllocation(PyOpenColorIO.Constants.ALLOCATION_UNIFORM) transform_to = PyOpenColorIO.FileTransform( "sRGB_CCTF_to_Linear_variant.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) transform_from = PyOpenColorIO.FileTransform( "sRGB_Linear_to_CCTF_variant.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) colourspace.setTransform( transform_to, PyOpenColorIO.Constants.COLORSPACE_DIR_TO_REFERENCE) colourspace.setTransform( transform_from, PyOpenColorIO.Constants.COLORSPACE_DIR_FROM_REFERENCE) config.addColorSpace(colourspace) # Define the commodity sRGB transform colourspace = PyOpenColorIO.ColorSpace(family="Colourspace", name="BT.709 2.2 CCTF Colourspace") colourspace.setDescription("Commodity Display BT.709 2.2 CCTF Colourspace") colourspace.setBitDepth(PyOpenColorIO.Constants.BIT_DEPTH_F32) colourspace.setAllocationVars([0.0, 1.0]) colourspace.setAllocation(PyOpenColorIO.Constants.ALLOCATION_UNIFORM) transform_to = PyOpenColorIO.ExponentTransform([2.2, 2.2, 2.2, 1.0]) transform_from = PyOpenColorIO.ExponentTransform([2.2, 2.2, 2.2, 1.0]) transform_from.setDirection(PyOpenColorIO.Constants.TRANSFORM_DIR_INVERSE) colourspace.setTransform( transform_to, PyOpenColorIO.Constants.COLORSPACE_DIR_TO_REFERENCE) colourspace.setTransform( transform_from, PyOpenColorIO.Constants.COLORSPACE_DIR_FROM_REFERENCE) config.addColorSpace(colourspace)
def make_transforms(transform_path, config): # The canonized sRGB transform # Due to the nature of the GPU issues in OpenColorIO v1.1.1, this # 1D LUT oversamples the sRGB transfer function range to have # correct results via the GPU. # # It also adds a faster inverse transform instead of a lookup for # output processing speed. It must be larger as a result, due to # quantisation issues in the linear domain. sRGB_domain = numpy.array([-0.125, 3.0]) sRGB_tf_to_linear_LUT = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_decoding( colour.LUT1D.linear_table(1024, sRGB_domain)), name="sRGB to Linear", domain=sRGB_domain, comments=["sRGB CCTF to Display Linear"]) sRGB_linear_to_tf_LUT_variant = colour.LUT1D( table=models.sRGB_COLOURSPACE.cctf_encoding( colour.LUT1D.linear_table(8192, sRGB_domain)), name="Linear to sRGB", domain=sRGB_domain, comments=["sRGB Display Linear to CCTF"]) path = os.path.join(transform_path, "sRGB_CCTF_to_Linear.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_tf_to_linear_LUT, path=path, decimals=10) path = os.path.join(transform_path, "sRGB_Linear_to_CCTF.spi1d") create_directory(path) io.write_LUT(LUT=sRGB_linear_to_tf_LUT_variant, path=path, decimals=10) # Define the sRGB specification colourspace = PyOpenColorIO.ColorSpace(family="Colourspace", name="sRGB Colourspace") colourspace.setDescription("sRGB IEC 61966-2-1 Colourspace") colourspace.setBitDepth(PyOpenColorIO.Constants.BIT_DEPTH_F32) colourspace.setAllocationVars([0.0, 1.0]) colourspace.setAllocation(PyOpenColorIO.Constants.ALLOCATION_UNIFORM) transform_to = PyOpenColorIO.FileTransform( "sRGB_CCTF_to_Linear.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) transform_from = PyOpenColorIO.FileTransform( "sRGB_Linear_to_CCTF.spi1d", interpolation=PyOpenColorIO.Constants.INTERP_NEAREST) colourspace.setTransform( transform_to, PyOpenColorIO.Constants.COLORSPACE_DIR_TO_REFERENCE) colourspace.setTransform( transform_from, PyOpenColorIO.Constants.COLORSPACE_DIR_FROM_REFERENCE) config.addColorSpace(colourspace) # Define the commodity sRGB transform colourspace = PyOpenColorIO.ColorSpace(family="Colourspace", name="BT.709 2.2 CCTF Colourspace") colourspace.setDescription("Commodity Display BT.709 2.2 CCTF Colourspace") colourspace.setBitDepth(PyOpenColorIO.Constants.BIT_DEPTH_F32) colourspace.setAllocationVars([0.0, 1.0]) colourspace.setAllocation(PyOpenColorIO.Constants.ALLOCATION_UNIFORM) transform_to = PyOpenColorIO.ExponentTransform([2.2, 2.2, 2.2, 1.0]) transform_from = PyOpenColorIO.ExponentTransform([2.2, 2.2, 2.2, 1.0]) transform_from.setDirection(PyOpenColorIO.Constants.TRANSFORM_DIR_INVERSE) colourspace.setTransform( transform_to, PyOpenColorIO.Constants.COLORSPACE_DIR_TO_REFERENCE) colourspace.setTransform( transform_from, PyOpenColorIO.Constants.COLORSPACE_DIR_FROM_REFERENCE) config.addColorSpace(colourspace)