def test_sanity(): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings assert_equal(v[0], '1.0.0 pil') assert_equal(list(map(type, v)), [str, str, str, str]) # internal version number assert_match(ImageCms.core.littlecms_version, "\d+\.\d+$") i = ImageCms.profileToProfile(lena(), SRGB, SRGB) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") assert_equal(t.inputMode, "RGB") assert_equal(t.outputMode, "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) # test PointTransform convenience API im = lena().point(t)
def get_transform(from_name, to_name, to_intent='perceptual', proof_name=None, proof_intent=None, use_black_pt=False): global icc_transform if not have_cms: return ColorManagerError("Either pillow is not installed, or there is " "no ICC support in this version of pillow") flags = 0 if proof_name is not None: if hasattr(ImageCms, 'FLAGS'): # supporting multiple versions of lcms...sigh.. flags |= ImageCms.FLAGS['SOFTPROOFING'] else: flags |= ImageCms.SOFTPROOFING if use_black_pt: if hasattr(ImageCms, 'FLAGS'): flags |= ImageCms.FLAGS['BLACKPOINTCOMPENSATION'] else: flags |= ImageCms.BLACKPOINTCOMPENSATION key = get_transform_key(from_name, to_name, to_intent, proof_name, proof_intent, flags) try: output_transform = icc_transform[key] except KeyError: # try to build transform on the fly try: if proof_name is not None: output_transform = ImageCms.buildProofTransform( profile[from_name].path, profile[to_name].path, profile[proof_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], proofRenderingIntent=intents[proof_intent], flags=flags) else: output_transform = ImageCms.buildTransform( profile[from_name].path, profile[to_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], flags=flags) icc_transform[key] = output_transform except Exception as e: raise ColorManagerError( "Failed to build profile transform: {!r}".format(e)) return output_transform
def get_transform(from_name, to_name, to_intent='perceptual', proof_name=None, proof_intent=None, use_black_pt=False): global icc_transform flags = 0 if proof_name is not None: if hasattr(ImageCms, 'FLAGS'): # supporting multiple versions of lcms...sigh.. flags |= ImageCms.FLAGS['SOFTPROOFING'] else: flags |= ImageCms.SOFTPROOFING if use_black_pt: if hasattr(ImageCms, 'FLAGS'): flags |= ImageCms.FLAGS['BLACKPOINTCOMPENSATION'] else: flags |= ImageCms.BLACKPOINTCOMPENSATION key = get_transform_key(from_name, to_name, to_intent, proof_name, proof_intent, flags) try: output_transform = icc_transform[key] except KeyError: # try to build transform on the fly try: if not (proof_name is None): output_transform = ImageCms.buildProofTransform( profile[from_name].path, profile[to_name].path, profile[proof_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], proofRenderingIntent=intents[proof_intent], flags=flags) else: output_transform = ImageCms.buildTransform( profile[from_name].path, profile[to_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], flags=flags) icc_transform[key] = output_transform except Exception as e: raise Exception("Failed to build profile transform: %s" % (str(e))) return output_transform
def get_transform(from_name, to_name, to_intent='perceptual', proof_name=None, proof_intent=None, use_black_pt=False): global icc_transform flags = 0 if proof_name is not None: if hasattr(ImageCms, 'FLAGS'): # supporting multiple versions of lcms...sigh.. flags |= ImageCms.FLAGS['SOFTPROOFING'] else: flags |= ImageCms.SOFTPROOFING if use_black_pt: if hasattr(ImageCms, 'FLAGS'): flags |= ImageCms.FLAGS['BLACKPOINTCOMPENSATION'] else: flags |= ImageCms.BLACKPOINTCOMPENSATION key = get_transform_key(from_name, to_name, to_intent, proof_name, proof_intent, flags) try: output_transform = icc_transform[key] except KeyError: # try to build transform on the fly try: if not (proof_name is None): output_transform = ImageCms.buildProofTransform( profile[from_name].path, profile[to_name].path, profile[proof_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], proofRenderingIntent=intents[proof_intent], flags=flags) else: output_transform = ImageCms.buildTransform( profile[from_name].path, profile[to_name].path, 'RGB', 'RGB', renderingIntent=intents[to_intent], flags=flags) icc_transform[key] = output_transform except Exception as e: raise Exception("Failed to build profile transform: %s" % (str(e))) return output_transform
def get_transform(from_name, to_name, to_intent='perceptual', proof_name=None, proof_intent=None, use_black_pt=False): global icc_transform flags = 0 if not (proof_name is None): flags |= ImageCms.SOFTPROOFING if use_black_pt: flags |= ImageCms.BLACKPOINTCOMPENSATION key = get_transform_key(from_name, to_name, to_intent, proof_name, proof_intent, flags) try: output_transform = icc_transform[key] except KeyError: # try to build transform on the fly try: if not (proof_name is None): output_transform = ImageCms.buildProofTransform( profile[from_name], profile[to_name], profile[proof_name], 'RGB', 'RGB', renderingIntent=intents[to_intent], proofRenderingIntent=intents[proof_intent], flags=flags) else: output_transform = ImageCms.buildTransform( profile[from_name], profile[to_name], 'RGB', 'RGB', renderingIntent=intents[to_intent], flags=flags) icc_transform[key] = output_transform except Exception as e: raise Exception("Failed to build profile transform: %s" % (str(e))) return output_transform
def test_sanity(self): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings self.assertEqual(v[0], '1.0.0 pil') self.assertEqual(list(map(type, v)), [str, str, str, str]) # internal version number self.assertRegexpMatches(ImageCms.core.littlecms_version, r"\d+\.\d+$") self.skip_missing() i = ImageCms.profileToProfile(hopper(), SRGB, SRGB) self.assert_image(i, "RGB", (128, 128)) i = hopper() ImageCms.profileToProfile(i, SRGB, SRGB, inPlace=True) self.assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) i = hopper() t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") ImageCms.applyTransform(hopper(), t, inPlace=True) self.assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") self.assertEqual(t.inputMode, "RGB") self.assertEqual(t.outputMode, "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) # test PointTransform convenience API hopper().point(t)
def test_sanity(self): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings self.assertEqual(v[0], '1.0.0 pil') self.assertEqual(list(map(type, v)), [str, str, str, str]) # internal version number self.assertRegexpMatches(ImageCms.core.littlecms_version, r"\d+\.\d+$") self.skip_missing() i = ImageCms.profileToProfile(hopper(), SRGB, SRGB) self.assert_image(i, "RGB", (128, 128)) i = hopper() ImageCms.profileToProfile(i, SRGB, SRGB, inPlace=True) self.assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) i = hopper() t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") ImageCms.applyTransform(hopper(), t, inPlace=True) self.assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") self.assertEqual(t.inputMode, "RGB") self.assertEqual(t.outputMode, "RGB") i = ImageCms.applyTransform(hopper(), t) self.assert_image(i, "RGB", (128, 128)) # test PointTransform convenience API hopper().point(t)
def get_transform(from_name, to_name, to_intent='perceptual', proof_name=None, proof_intent=None, use_black_pt=False): global icc_transform flags = 0 if not (proof_name is None): flags |= ImageCms.SOFTPROOFING if use_black_pt: flags |= ImageCms.BLACKPOINTCOMPENSATION key = get_transform_key(from_name, to_name, to_intent, proof_name, proof_intent, flags) try: output_transform = icc_transform[key] except KeyError: # try to build transform on the fly try: if not (proof_name is None): output_transform = ImageCms.buildProofTransform( profile[from_name], profile[to_name], profile[proof_name], 'RGB', 'RGB', renderingIntent=intents[to_intent], proofRenderingIntent=intents[proof_intent], flags=flags) else: output_transform = ImageCms.buildTransform( profile[from_name], profile[to_name], 'RGB', 'RGB', renderingIntent=intents[to_intent], flags=flags) icc_transform[key] = output_transform except Exception as e: raise Exception("Failed to build profile transform: %s" % (str(e))) return output_transform
def test_sanity(): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings assert v[0] == "1.0.0 pil" assert list(map(type, v)) == [str, str, str, str] # internal version number assert re.search(r"\d+\.\d+(\.\d+)?$", features.version_module("littlecms2")) skip_missing() i = ImageCms.profileToProfile(hopper(), SRGB, SRGB) assert_image(i, "RGB", (128, 128)) i = hopper() ImageCms.profileToProfile(i, SRGB, SRGB, inPlace=True) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) assert_image(i, "RGB", (128, 128)) with hopper() as i: t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") ImageCms.applyTransform(hopper(), t, inPlace=True) assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(hopper(), t) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") assert t.inputMode == "RGB" assert t.outputMode == "RGB" i = ImageCms.applyTransform(hopper(), t) assert_image(i, "RGB", (128, 128)) # test PointTransform convenience API hopper().point(t)
# and, to clean up a bit, delete the transform # this should call the C destructor for the each item. # Python should also do this automatically when it goes out of scope. del(inputProfile) del(outputProfile) del(transform) if TEST_buildProofTransform == True: # make a transform using the input and output and proof profile path # strings # images converted with this transform will simulate the appearance # of the output device while actually being displayed/proofed on the # proof device. This usually means a monitor, but can also mean # other proof-printers like dye-sub, etc. transform = ImageCms.buildProofTransform(INPUT_PROFILE, OUTPUT_PROFILE, \ PROOF_PROFILE, INMODE, OUTMODE) # now, use the trnsform to convert a couple images im = Image.open(IMAGE) # transform im normally im2 = ImageCms.applyTransform(im, transform) outputImage(im2, "buildProofTransform") # then transform it again using the same transform, this time in-place. result = ImageCms.applyTransform(im, transform, inPlace = True) outputImage(im, "buildProofTransform_inPlace") print("buildProofTransform test completed successfully.") # and, to clean up a bit, delete the transform
def test_sanity(): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings assert_equal(v[0], '0.1.0 pil') assert_equal(map(type, v), [str, str, str, str]) # internal version number assert_match(ImageCms.core.littlecms_version, "\d+\.\d+$") i = ImageCms.profileToProfile(lena(), SRGB, SRGB) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") assert_equal(t.inputMode, "RGB") assert_equal(t.outputMode, "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) # get profile information for file assert_equal( ImageCms.getProfileName(SRGB).strip(), 'IEC 61966-2.1 Default RGB colour space - sRGB') assert_equal( ImageCms.getProfileInfo(SRGB).splitlines(), [ 'sRGB IEC61966-2.1', '', 'Copyright (c) 1998 Hewlett-Packard Company', '', 'WhitePoint : D65 (daylight)', '', 'Tests/icc/sRGB.icm' ]) assert_equal(ImageCms.getDefaultIntent(SRGB), 0) assert_equal( ImageCms.isIntentSupported(SRGB, ImageCms.INTENT_ABSOLUTE_COLORIMETRIC, ImageCms.DIRECTION_INPUT), 1) # same, using profile object p = ImageCms.createProfile("sRGB") assert_equal( ImageCms.getProfileName(p).strip(), 'sRGB built-in - (lcms internal)') assert_equal( ImageCms.getProfileInfo(p).splitlines(), ['sRGB built-in', '', 'WhitePoint : D65 (daylight)', '', '']) assert_equal(ImageCms.getDefaultIntent(p), 0) assert_equal( ImageCms.isIntentSupported(p, ImageCms.INTENT_ABSOLUTE_COLORIMETRIC, ImageCms.DIRECTION_INPUT), 1) # extensions i = Image.open("Tests/images/rgb.jpg") p = ImageCms.getOpenProfile(StringIO(i.info["icc_profile"])) assert_equal( ImageCms.getProfileName(p).strip(), 'IEC 61966-2.1 Default RGB colour space - sRGB') # the procedural pyCMS API uses PyCMSError for all sorts of errors assert_exception(ImageCms.PyCMSError, lambda: ImageCms.profileToProfile(lena(), "foo", "bar")) assert_exception( ImageCms.PyCMSError, lambda: ImageCms.buildTransform("foo", "bar", "RGB", "RGB")) assert_exception(ImageCms.PyCMSError, lambda: ImageCms.getProfileName(None)) assert_exception(ImageCms.PyCMSError, lambda: ImageCms.isIntentSupported(SRGB, None, None)) # test PointTransform convenience API im = lena().point(t) # try fetching the profile for the current display device assert_no_exception(lambda: ImageCms.get_display_profile())
def test_sanity(): # basic smoke test. # this mostly follows the cms_test outline. v = ImageCms.versions() # should return four strings assert_equal(v[0], '0.1.0 pil') assert_equal(list(map(type, v)), [str, str, str, str]) # internal version number assert_match(ImageCms.core.littlecms_version, "\d+\.\d+$") i = ImageCms.profileToProfile(lena(), SRGB, SRGB) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildTransform(SRGB, SRGB, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) p = ImageCms.createProfile("sRGB") o = ImageCms.getOpenProfile(SRGB) t = ImageCms.buildTransformFromOpenProfiles(p, o, "RGB", "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) t = ImageCms.buildProofTransform(SRGB, SRGB, SRGB, "RGB", "RGB") assert_equal(t.inputMode, "RGB") assert_equal(t.outputMode, "RGB") i = ImageCms.applyTransform(lena(), t) assert_image(i, "RGB", (128, 128)) # get profile information for file assert_equal(ImageCms.getProfileName(SRGB).strip(), 'IEC 61966-2.1 Default RGB colour space - sRGB') assert_equal(ImageCms.getProfileInfo(SRGB).splitlines(), ['sRGB IEC61966-2.1', '', 'Copyright (c) 1998 Hewlett-Packard Company', '', 'WhitePoint : D65 (daylight)', '', 'Tests/icc/sRGB.icm']) assert_equal(ImageCms.getDefaultIntent(SRGB), 0) assert_equal(ImageCms.isIntentSupported( SRGB, ImageCms.INTENT_ABSOLUTE_COLORIMETRIC, ImageCms.DIRECTION_INPUT), 1) # same, using profile object p = ImageCms.createProfile("sRGB") assert_equal(ImageCms.getProfileName(p).strip(), 'sRGB built-in - (lcms internal)') assert_equal(ImageCms.getProfileInfo(p).splitlines(), ['sRGB built-in', '', 'WhitePoint : D65 (daylight)', '', '']) assert_equal(ImageCms.getDefaultIntent(p), 0) assert_equal(ImageCms.isIntentSupported( p, ImageCms.INTENT_ABSOLUTE_COLORIMETRIC, ImageCms.DIRECTION_INPUT), 1) # extensions i = Image.open("Tests/images/rgb.jpg") p = ImageCms.getOpenProfile(BytesIO(i.info["icc_profile"])) assert_equal(ImageCms.getProfileName(p).strip(), 'IEC 61966-2.1 Default RGB colour space - sRGB') # the procedural pyCMS API uses PyCMSError for all sorts of errors assert_exception(ImageCms.PyCMSError, lambda: ImageCms.profileToProfile(lena(), "foo", "bar")) assert_exception(ImageCms.PyCMSError, lambda: ImageCms.buildTransform("foo", "bar", "RGB", "RGB")) assert_exception(ImageCms.PyCMSError, lambda: ImageCms.getProfileName(None)) assert_exception(ImageCms.PyCMSError, lambda: ImageCms.isIntentSupported(SRGB, None, None)) # test PointTransform convenience API im = lena().point(t) # try fetching the profile for the current display device assert_no_exception(lambda: ImageCms.get_display_profile())
# and, to clean up a bit, delete the transform # this should call the C destructor for the each item. # Python should also do this automatically when it goes out of scope. del (inputProfile) del (outputProfile) del (transform) if TEST_buildProofTransform == True: # make a transform using the input and output and proof profile path # strings # images converted with this transform will simulate the appearance # of the output device while actually being displayed/proofed on the # proof device. This usually means a monitor, but can also mean # other proof-printers like dye-sub, etc. transform = ImageCms.buildProofTransform(INPUT_PROFILE, OUTPUT_PROFILE, \ PROOF_PROFILE, INMODE, OUTMODE) # now, use the trnsform to convert a couple images im = Image.open(IMAGE) # transform im normally im2 = ImageCms.applyTransform(im, transform) outputImage(im2, "buildProofTransform") # then transform it again using the same transform, this time in-place. result = ImageCms.applyTransform(im, transform, inPlace=True) outputImage(im, "buildProofTransform_inPlace") print "buildProofTransform test completed successfully." # and, to clean up a bit, delete the transform