Beispiel #1
0
    def test_profile_tobytes(self):
        i = Image.open("Tests/images/rgb.jpg")
        p = ImageCms.getOpenProfile(BytesIO(i.info["icc_profile"]))

        p2 = ImageCms.getOpenProfile(BytesIO(p.tobytes()))

        # not the same bytes as the original icc_profile,
        # but it does roundtrip
        self.assertEqual(p.tobytes(), p2.tobytes())
        self.assertEqual(ImageCms.getProfileName(p),
                         ImageCms.getProfileName(p2))
        self.assertEqual(ImageCms.getProfileDescription(p),
                         ImageCms.getProfileDescription(p2))
Beispiel #2
0
    def test_extensions(self):
        # extensions

        i = Image.open("Tests/images/rgb.jpg")
        p = ImageCms.getOpenProfile(BytesIO(i.info["icc_profile"]))
        self.assertEqual(
            ImageCms.getProfileName(p).strip(),
            'IEC 61966-2.1 Default RGB colour space - sRGB')
Beispiel #3
0
    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.assertRegex(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)
Beispiel #4
0
    def test_extended_information(self):
        self.skip_missing()
        o = ImageCms.getOpenProfile(SRGB)
        p = o.profile

        def assert_truncated_tuple_equal(tup1, tup2, digits=10):
            # Helper function to reduce precision of tuples of floats
            # recursively and then check equality.
            power = 10**digits

            def truncate_tuple(tuple_or_float):
                return tuple(
                    truncate_tuple(val) if isinstance(val, tuple
                                                      ) else int(val * power) /
                    power for val in tuple_or_float)

            self.assertEqual(truncate_tuple(tup1), truncate_tuple(tup2))

        self.assertEqual(p.attributes, 4294967296)
        assert_truncated_tuple_equal(
            p.blue_colorant,
            ((0.14306640625, 0.06060791015625, 0.7140960693359375),
             (0.1558847490315394, 0.06603820639433387, 0.06060791015625)))
        assert_truncated_tuple_equal(
            p.blue_primary,
            ((0.14306641366715667, 0.06060790921083026, 0.7140960805782015),
             (0.15588475410450106, 0.06603820408959558, 0.06060790921083026)))
        assert_truncated_tuple_equal(
            p.chromatic_adaptation,
            (((1.04791259765625, 0.0229339599609375, -0.050201416015625),
              (0.02960205078125, 0.9904632568359375, -0.0170745849609375),
              (-0.009246826171875, 0.0150604248046875, 0.7517852783203125)),
             ((1.0267159024652783, 0.022470062342089134, 0.0229339599609375),
              (0.02951378324103937, 0.9875098886387147, 0.9904632568359375),
              (-0.012205438066465256, 0.01987915407854985,
               0.0150604248046875))))
        self.assertIsNone(p.chromaticity)
        self.assertEqual(
            p.clut, {
                0: (False, False, True),
                1: (False, False, True),
                2: (False, False, True),
                3: (False, False, True)
            })
        self.assertEqual(p.color_space, 'RGB')
        self.assertIsNone(p.colorant_table)
        self.assertIsNone(p.colorant_table_out)
        self.assertIsNone(p.colorimetric_intent)
        self.assertEqual(p.connection_space, 'XYZ ')
        self.assertEqual(p.copyright,
                         'Copyright International Color Consortium, 2009')
        self.assertEqual(p.creation_date,
                         datetime.datetime(2009, 2, 27, 21, 36, 31))
        self.assertEqual(p.device_class, 'mntr')
        assert_truncated_tuple_equal(
            p.green_colorant,
            ((0.3851470947265625, 0.7168731689453125, 0.097076416015625),
             (0.32119769927720654, 0.5978443449048152, 0.7168731689453125)))
        assert_truncated_tuple_equal(
            p.green_primary,
            ((0.3851470888162112, 0.7168731974161346, 0.09707641738998518),
             (0.32119768793686687, 0.5978443567149709, 0.7168731974161346)))
        self.assertEqual(p.header_flags, 0)
        self.assertEqual(p.header_manufacturer, '\x00\x00\x00\x00')
        self.assertEqual(p.header_model, '\x00\x00\x00\x00')
        self.assertEqual(
            p.icc_measurement_condition, {
                'backing': (0.0, 0.0, 0.0),
                'flare': 0.0,
                'geo': 'unknown',
                'observer': 1,
                'illuminant_type': 'D65'
            })
        self.assertEqual(p.icc_version, 33554432)
        self.assertIsNone(p.icc_viewing_condition)
        self.assertEqual(
            p.intent_supported, {
                0: (True, True, True),
                1: (True, True, True),
                2: (True, True, True),
                3: (True, True, True)
            })
        self.assertTrue(p.is_matrix_shaper)
        self.assertEqual(p.luminance, ((0.0, 80.0, 0.0), (0.0, 1.0, 80.0)))
        self.assertIsNone(p.manufacturer)
        assert_truncated_tuple_equal(
            p.media_black_point,
            ((0.012054443359375, 0.0124969482421875, 0.01031494140625),
             (0.34573304157549234, 0.35842450765864337, 0.0124969482421875)))
        assert_truncated_tuple_equal(
            p.media_white_point,
            ((0.964202880859375, 1.0, 0.8249053955078125),
             (0.3457029219802284, 0.3585375327567059, 1.0)))
        assert_truncated_tuple_equal((p.media_white_point_temperature, ),
                                     (5000.722328847392, ))
        self.assertEqual(p.model,
                         'IEC 61966-2-1 Default RGB Colour Space - sRGB')
        self.assertEqual(p.pcs, 'XYZ')
        self.assertIsNone(p.perceptual_rendering_intent_gamut)
        self.assertEqual(p.product_copyright,
                         'Copyright International Color Consortium, 2009')
        self.assertEqual(p.product_desc, 'sRGB IEC61966-2-1 black scaled')
        self.assertEqual(p.product_description,
                         'sRGB IEC61966-2-1 black scaled')
        self.assertEqual(p.product_manufacturer, '')
        self.assertEqual(p.product_model,
                         'IEC 61966-2-1 Default RGB Colour Space - sRGB')
        self.assertEqual(p.profile_description,
                         'sRGB IEC61966-2-1 black scaled')
        self.assertEqual(p.profile_id,
                         b')\xf8=\xde\xaf\xf2U\xaexB\xfa\xe4\xca\x839\r')
        assert_truncated_tuple_equal(
            p.red_colorant,
            ((0.436065673828125, 0.2224884033203125, 0.013916015625),
             (0.6484536316398539, 0.3308524880306778, 0.2224884033203125)))
        assert_truncated_tuple_equal(
            p.red_primary,
            ((0.43606566581047446, 0.22248840582960838, 0.013916015621759925),
             (0.6484536250319214, 0.3308524944738204, 0.22248840582960838)))
        self.assertEqual(p.rendering_intent, 0)
        self.assertIsNone(p.saturation_rendering_intent_gamut)
        self.assertIsNone(p.screening_description)
        self.assertIsNone(p.target)
        self.assertEqual(p.technology, 'CRT ')
        self.assertEqual(p.version, 2.0)
        self.assertEqual(p.viewing_condition,
                         'Reference Viewing Condition in IEC 61966-2-1')
        self.assertEqual(p.xcolor_space, 'RGB ')