diff --git a/Tests/test_color_lut.py b/Tests/test_color_lut.py index 4aedd5b43..b6d6e441f 100644 --- a/Tests/test_color_lut.py +++ b/Tests/test_color_lut.py @@ -297,104 +297,6 @@ class TestColorLut3DFilter(PillowTestCase): ImageFilter.Color3DLUT.generate(5, channels=4, callback=lambda r, g, b: (r, g, b)) - def test_from_cube_file_minimal(self): - lut = ImageFilter.Color3DLUT.from_cube_file([ - "LUT_3D_SIZE 2", - "0 0 0.031", - "0.96 0 0.031", - "0 1 0.031", - "0.96 1 0.031", - "0 0 0.931", - "0.96 0 0.931", - "0 1 0.931", - "0.96 1 0.931", - ]) - self.assertEqual(tuple(lut.size), (2, 2, 2)) - self.assertEqual(lut.name, "Color 3D LUT") - self.assertEqual(lut.table[:12], [ - 0, 0, 0.031, 0.96, 0, 0.031, 0, 1, 0.031, 0.96, 1, 0.031]) - - def test_from_cube_file_parser(self): - lut = ImageFilter.Color3DLUT.from_cube_file([ - " # Comment", - 'TITLE "LUT name from file"', - " LUT_3D_SIZE 2 3 4", - " SKIP THIS", - "", - " # Comment", - "CHANNELS 4", - "", - ] + [ - " # Comment", - "0 0 0.031 1", - "0.96 0 0.031 1", - "", - "0 1 0.031 1", - "0.96 1 0.031 1", - ] * 6, target_mode='HSV') - self.assertEqual(tuple(lut.size), (2, 3, 4)) - self.assertEqual(lut.channels, 4) - self.assertEqual(lut.name, "LUT name from file") - self.assertEqual(lut.mode, 'HSV') - self.assertEqual(lut.table[:12], [ - 0, 0, 0.031, 1, 0.96, 0, 0.031, 1, 0, 1, 0.031, 1]) - - def test_from_cube_file_errors(self): - with self.assertRaisesRegexp(ValueError, "No size found"): - lut = ImageFilter.Color3DLUT.from_cube_file([ - 'TITLE "LUT name from file"', - ] + [ - "0 0 0.031", - "0.96 0 0.031", - ] * 3) - - with self.assertRaisesRegexp(ValueError, "number of colors on line 3"): - lut = ImageFilter.Color3DLUT.from_cube_file([ - 'LUT_3D_SIZE 2', - ] + [ - "0 0 0.031", - "0.96 0 0.031 1", - ] * 3) - - with self.assertRaisesRegexp(ValueError, "1D LUT cube files"): - lut = ImageFilter.Color3DLUT.from_cube_file([ - 'LUT_1D_SIZE 2', - ] + [ - "0 0 0.031", - "0.96 0 0.031 1", - ]) - - with self.assertRaisesRegexp(ValueError, "Not a number on line 2"): - lut = ImageFilter.Color3DLUT.from_cube_file([ - 'LUT_3D_SIZE 2', - ] + [ - "0 green 0.031", - "0.96 0 0.031", - ] * 3) - - def test_from_cube_file_filename(self): - with NamedTemporaryFile('w+t', delete=False) as f: - f.write( - "LUT_3D_SIZE 2\n" - "0 0 0.031\n" - "0.96 0 0.031\n" - "0 1 0.031\n" - "0.96 1 0.031\n" - "0 0 0.931\n" - "0.96 0 0.931\n" - "0 1 0.931\n" - "0.96 1 0.931\n" - ) - - try: - lut = ImageFilter.Color3DLUT.from_cube_file(f.name) - self.assertEqual(tuple(lut.size), (2, 2, 2)) - self.assertEqual(lut.name, "Color 3D LUT") - self.assertEqual(lut.table[:12], [ - 0, 0, 0.031, 0.96, 0, 0.031, 0, 1, 0.031, 0.96, 1, 0.031]) - finally: - os.unlink(f.name) - if __name__ == '__main__': unittest.main() diff --git a/src/PIL/ImageFilter.py b/src/PIL/ImageFilter.py index 8e193798d..63e0d46e8 100644 --- a/src/PIL/ImageFilter.py +++ b/src/PIL/ImageFilter.py @@ -389,66 +389,6 @@ class Color3DLUT(MultibandFilter): return cls((size1D, size2D, size3D), table, channels, target_mode) - @classmethod - def from_cube_file(cls, lines, target_mode=None): - name, size = None, None - channels = 3 - file = None - - if isPath(lines): - file = lines = open(lines, 'rt') - - try: - iterator = iter(lines) - - for i, line in enumerate(iterator, 1): - line = line.strip() - if line.startswith('TITLE "'): - name = line.split('"')[1] - continue - if line.startswith('LUT_3D_SIZE '): - size = [int(x) for x in line.split()[1:]] - if len(size) == 1: - size = size[0] - continue - if line.startswith('CHANNELS '): - channels = int(line.split()[1]) - if line.startswith('LUT_1D_SIZE '): - raise ValueError("1D LUT cube files aren't supported.") - - try: - float(line.partition(' ')[0]) - except ValueError: - pass - else: - # Data starts - break - - if size is None: - raise ValueError('No size found in the file') - - table = [] - for i, line in enumerate(chain([line], iterator), i): - line = line.strip() - if not line or line.startswith('#'): - continue - try: - pixel = [float(x) for x in line.split()] - except ValueError: - raise ValueError("Not a number on line {}".format(i)) - if len(pixel) != channels: - raise ValueError( - "Wrong number of colors on line {}".format(i)) - table.append(tuple(pixel)) - finally: - if file is not None: - file.close() - - instance = cls(size, table, channels, target_mode) - if name is not None: - instance.name = name - return instance - def filter(self, image): from . import Image