mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 09:44:31 +03:00
improve color cube parser
This commit is contained in:
parent
c1b956e3c8
commit
805dc44707
|
@ -300,7 +300,6 @@ class TestColorLut3DFilter(PillowTestCase):
|
||||||
def test_from_cube_file_minimal(self):
|
def test_from_cube_file_minimal(self):
|
||||||
lut = ImageFilter.Color3DLUT.from_cube_file([
|
lut = ImageFilter.Color3DLUT.from_cube_file([
|
||||||
"LUT_3D_SIZE 2",
|
"LUT_3D_SIZE 2",
|
||||||
"",
|
|
||||||
"0 0 0.031",
|
"0 0 0.031",
|
||||||
"0.96 0 0.031",
|
"0.96 0 0.031",
|
||||||
"0 1 0.031",
|
"0 1 0.031",
|
||||||
|
@ -321,6 +320,7 @@ class TestColorLut3DFilter(PillowTestCase):
|
||||||
'TITLE "LUT name from file"',
|
'TITLE "LUT name from file"',
|
||||||
" LUT_3D_SIZE 2 3 4",
|
" LUT_3D_SIZE 2 3 4",
|
||||||
" SKIP THIS",
|
" SKIP THIS",
|
||||||
|
"",
|
||||||
" # Comment",
|
" # Comment",
|
||||||
"CHANNELS 4",
|
"CHANNELS 4",
|
||||||
"",
|
"",
|
||||||
|
@ -343,25 +343,30 @@ class TestColorLut3DFilter(PillowTestCase):
|
||||||
with self.assertRaisesRegexp(ValueError, "No size found"):
|
with self.assertRaisesRegexp(ValueError, "No size found"):
|
||||||
lut = ImageFilter.Color3DLUT.from_cube_file([
|
lut = ImageFilter.Color3DLUT.from_cube_file([
|
||||||
'TITLE "LUT name from file"',
|
'TITLE "LUT name from file"',
|
||||||
"",
|
|
||||||
] + [
|
] + [
|
||||||
"0 0 0.031",
|
"0 0 0.031",
|
||||||
"0.96 0 0.031",
|
"0.96 0 0.031",
|
||||||
] * 3)
|
] * 3)
|
||||||
|
|
||||||
with self.assertRaisesRegexp(ValueError, "number of colors on line 4"):
|
with self.assertRaisesRegexp(ValueError, "number of colors on line 3"):
|
||||||
lut = ImageFilter.Color3DLUT.from_cube_file([
|
lut = ImageFilter.Color3DLUT.from_cube_file([
|
||||||
'LUT_3D_SIZE 2',
|
'LUT_3D_SIZE 2',
|
||||||
"",
|
|
||||||
] + [
|
] + [
|
||||||
"0 0 0.031",
|
"0 0 0.031",
|
||||||
"0.96 0 0.031 1",
|
"0.96 0 0.031 1",
|
||||||
] * 3)
|
] * 3)
|
||||||
|
|
||||||
with self.assertRaisesRegexp(ValueError, "Not a number on line 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 = ImageFilter.Color3DLUT.from_cube_file([
|
||||||
'LUT_3D_SIZE 2',
|
'LUT_3D_SIZE 2',
|
||||||
"",
|
|
||||||
] + [
|
] + [
|
||||||
"0 green 0.031",
|
"0 green 0.031",
|
||||||
"0.96 0 0.031",
|
"0.96 0 0.031",
|
||||||
|
@ -371,7 +376,6 @@ class TestColorLut3DFilter(PillowTestCase):
|
||||||
with NamedTemporaryFile('w+t', delete=False) as f:
|
with NamedTemporaryFile('w+t', delete=False) as f:
|
||||||
f.write(
|
f.write(
|
||||||
"LUT_3D_SIZE 2\n"
|
"LUT_3D_SIZE 2\n"
|
||||||
"\n"
|
|
||||||
"0 0 0.031\n"
|
"0 0 0.031\n"
|
||||||
"0.96 0 0.031\n"
|
"0.96 0 0.031\n"
|
||||||
"0 1 0.031\n"
|
"0 1 0.031\n"
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
from itertools import chain
|
||||||
|
|
||||||
from ._util import isPath
|
from ._util import isPath
|
||||||
|
|
||||||
|
@ -402,8 +403,6 @@ class Color3DLUT(MultibandFilter):
|
||||||
|
|
||||||
for i, line in enumerate(iterator, 1):
|
for i, line in enumerate(iterator, 1):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if not line:
|
|
||||||
break
|
|
||||||
if line.startswith('TITLE "'):
|
if line.startswith('TITLE "'):
|
||||||
name = line.split('"')[1]
|
name = line.split('"')[1]
|
||||||
continue
|
continue
|
||||||
|
@ -414,12 +413,22 @@ class Color3DLUT(MultibandFilter):
|
||||||
continue
|
continue
|
||||||
if line.startswith('CHANNELS '):
|
if line.startswith('CHANNELS '):
|
||||||
channels = int(line.split()[1])
|
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:
|
if size is None:
|
||||||
raise ValueError('No size found in the file')
|
raise ValueError('No size found in the file')
|
||||||
|
|
||||||
table = []
|
table = []
|
||||||
for i, line in enumerate(iterator, i + 1):
|
for i, line in enumerate(chain([line], iterator), i):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if not line or line.startswith('#'):
|
if not line or line.startswith('#'):
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in New Issue
Block a user