def cmyk2rgb(in_val, profile_rgb=None, profile_cmyk=None, intent=RELATIVE_COLORIMETRIC): if profile_rgb != None: prgb = lc.cmsOpenProfileFromFile(profile_rgb, 'r') # cmsCreate_sRGBProfile() else: prgb = lc.cmsCreate_sRGBProfile() pcmyk = lc.cmsOpenProfileFromFile(profile_cmyk, 'r') transform = lc.cmsCreateTransform( pcmyk, lc.TYPE_CMYK_8, prgb, lc.TYPE_RGB_8, intent, lc.cmsFLAGS_NOCACHE | lc.cmsFLAGS_NOOPTIMIZE | lc.cmsFLAGS_BLACKPOINTCOMPENSATION | lc.cmsFLAGS_HIGHRESPRECALC) n_pixels = 1 in_comps = 4 out_comps = 3 buf_in = lc.uint8Array(in_comps * n_pixels) buf_out = lc.uint8Array(out_comps * n_pixels) for i in range(in_comps): buf_in[i] = max(0, min(255, round(in_val[i] / 100 * 255))) lc.cmsDoTransform(transform, buf_in, buf_out, n_pixels) lc.cmsCloseProfile(prgb) lc.cmsCloseProfile(pcmyk) lc.cmsDeleteTransform(transform) return tuple(buf_out[i] for i in range(out_comps * n_pixels))
def cmyk2lab(in_val, profile_cmyk, intent=RELATIVE_COLORIMETRIC): white = lc.cmsD50_xyY() # Set white point for D50 plab = lc.cmsCreateLab4Profile(white) pcmyk = lc.cmsOpenProfileFromFile(profile_cmyk, 'r') transform = lc.cmsCreateTransform( pcmyk, lc.TYPE_CMYK_8, plab, lc.TYPE_Lab_DBL, intent, lc.cmsFLAGS_NOCACHE | lc.cmsFLAGS_NOOPTIMIZE | lc.cmsFLAGS_BLACKPOINTCOMPENSATION | lc.cmsFLAGS_HIGHRESPRECALC) n_pixels = 1 in_comps = 4 out_comps = 3 buf_in = lc.uint8Array(in_comps * n_pixels) buf_out = lc.doubleArray(out_comps * n_pixels) for i in range(in_comps): buf_in[i] = max(0, min(255, round(in_val[i] / 100 * 255))) lc.cmsDoTransform(transform, buf_in, buf_out, n_pixels) lc.cmsCloseProfile(plab) lc.cmsCloseProfile(pcmyk) lc.cmsDeleteTransform(transform) return tuple(buf_out[i] for i in range(out_comps * n_pixels))
def lab2rgb(in_val, profile_rgb=None, intent=RELATIVE_COLORIMETRIC): white = lc.cmsD50_xyY() # Set white point for D50 if profile_rgb != None: prgb = lc.cmsOpenProfileFromFile(profile_rgb, 'r') else: prgb = lc.cmsCreate_sRGBProfile() plab = lc.cmsCreateLab4Profile(white) transform = lc.cmsCreateTransform( plab, lc.TYPE_Lab_DBL, prgb, lc.TYPE_RGB_8, intent, lc.cmsFLAGS_NOCACHE | lc.cmsFLAGS_NOOPTIMIZE | lc.cmsFLAGS_BLACKPOINTCOMPENSATION | lc.cmsFLAGS_HIGHRESPRECALC) n_pixels = 1 in_comps = 3 out_comps = 3 buf_in = lc.doubleArray(in_comps * n_pixels) buf_out = lc.uint8Array(out_comps * n_pixels) for i in range(in_comps): buf_in[i] = in_val[i] lc.cmsDoTransform(transform, buf_in, buf_out, n_pixels) lc.cmsCloseProfile(prgb) lc.cmsCloseProfile(plab) lc.cmsDeleteTransform(transform) return tuple(buf_out[i] for i in range(out_comps * n_pixels))