mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 09:44:31 +03:00
Tests for python API
This commit is contained in:
parent
461a090405
commit
506995d816
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
from helper import unittest, PillowTestCase
|
from helper import unittest, PillowTestCase
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image, ImageFilter
|
||||||
|
|
||||||
|
|
||||||
class TestColorLut3DCoreAPI(PillowTestCase):
|
class TestColorLut3DCoreAPI(PillowTestCase):
|
||||||
|
@ -27,7 +27,7 @@ class TestColorLut3DCoreAPI(PillowTestCase):
|
||||||
channels, size1D, size2D, size3D,
|
channels, size1D, size2D, size3D,
|
||||||
[item for sublist in table for item in sublist])
|
[item for sublist in table for item in sublist])
|
||||||
|
|
||||||
def test_wrong_arguments(self):
|
def test_wrong_args(self):
|
||||||
im = Image.new('RGB', (10, 10), 0)
|
im = Image.new('RGB', (10, 10), 0)
|
||||||
|
|
||||||
with self.assertRaisesRegexp(ValueError, "filter"):
|
with self.assertRaisesRegexp(ValueError, "filter"):
|
||||||
|
@ -66,7 +66,7 @@ class TestColorLut3DCoreAPI(PillowTestCase):
|
||||||
im.im.color_lut_3d('RGB', Image.LINEAR,
|
im.im.color_lut_3d('RGB', Image.LINEAR,
|
||||||
3, 2, 2, 2, [0, 0, 0] * 9)
|
3, 2, 2, 2, [0, 0, 0] * 9)
|
||||||
|
|
||||||
def test_correct_arguments(self):
|
def test_correct_args(self):
|
||||||
im = Image.new('RGB', (10, 10), 0)
|
im = Image.new('RGB', (10, 10), 0)
|
||||||
|
|
||||||
im.im.color_lut_3d('RGB', Image.LINEAR,
|
im.im.color_lut_3d('RGB', Image.LINEAR,
|
||||||
|
@ -209,5 +209,46 @@ class TestColorLut3DCoreAPI(PillowTestCase):
|
||||||
self.assertEqual(transformed[205, 205], (255, 255, 0))
|
self.assertEqual(transformed[205, 205], (255, 255, 0))
|
||||||
|
|
||||||
|
|
||||||
|
class TestColorLut3DFilter(PillowTestCase):
|
||||||
|
def test_wrong_args(self):
|
||||||
|
with self.assertRaisesRegexp(ValueError, "should be an integer"):
|
||||||
|
ImageFilter.Color3DLUT("small", [1])
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, "should be an integer"):
|
||||||
|
ImageFilter.Color3DLUT((11, 11), [1])
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, r"in \[2, 65\] range"):
|
||||||
|
ImageFilter.Color3DLUT((11, 11, 1), [1])
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, r"in \[2, 65\] range"):
|
||||||
|
ImageFilter.Color3DLUT((11, 11, 66), [1])
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, "table should have .+ items"):
|
||||||
|
ImageFilter.Color3DLUT((3, 3, 3), [1, 1, 1])
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, "table should have .+ items"):
|
||||||
|
ImageFilter.Color3DLUT((3, 3, 3), [[1, 1, 1]] * 2)
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, "should have a length of 4"):
|
||||||
|
ImageFilter.Color3DLUT((3, 3, 3), [[1, 1, 1]] * 27, channels=4)
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(ValueError, "should have a length of 3"):
|
||||||
|
ImageFilter.Color3DLUT((2, 2, 2), [[1, 1]] * 8)
|
||||||
|
|
||||||
|
def test_convert_table(self):
|
||||||
|
flt = ImageFilter.Color3DLUT(2, [0, 1, 2] * 8)
|
||||||
|
self.assertEqual(tuple(flt.size), (2, 2, 2))
|
||||||
|
self.assertEqual(flt.name, "Color 3D LUT")
|
||||||
|
|
||||||
|
flt = ImageFilter.Color3DLUT((2, 2, 2), [
|
||||||
|
(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11),
|
||||||
|
(12, 13, 14), (15, 16, 17), (18, 19, 20), (21, 22, 23)])
|
||||||
|
self.assertEqual(tuple(flt.size), (2, 2, 2))
|
||||||
|
self.assertEqual(flt.table, list(range(24)))
|
||||||
|
|
||||||
|
flt = ImageFilter.Color3DLUT((2, 2, 2), [(0, 1, 2, 3)] * 8,
|
||||||
|
channels=4)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -43,6 +43,7 @@ class Kernel(MultibandFilter):
|
||||||
:param offset: Offset. If given, this value is added to the result,
|
:param offset: Offset. If given, this value is added to the result,
|
||||||
after it has been divided by the scale factor.
|
after it has been divided by the scale factor.
|
||||||
"""
|
"""
|
||||||
|
name = "Kernel"
|
||||||
|
|
||||||
def __init__(self, size, kernel, scale=None, offset=0):
|
def __init__(self, size, kernel, scale=None, offset=0):
|
||||||
if scale is None:
|
if scale is None:
|
||||||
|
@ -320,6 +321,8 @@ class Color3DLUT(MultibandFilter):
|
||||||
than ``channels`` channels. Default is ``None``,
|
than ``channels`` channels. Default is ``None``,
|
||||||
which means that mode wouldn't be changed.
|
which means that mode wouldn't be changed.
|
||||||
"""
|
"""
|
||||||
|
name = "Color 3D LUT"
|
||||||
|
|
||||||
def __init__(self, size, table, channels=3, target_mode=None):
|
def __init__(self, size, table, channels=3, target_mode=None):
|
||||||
try:
|
try:
|
||||||
_, _, _ = size
|
_, _, _ = size
|
||||||
|
@ -328,24 +331,31 @@ class Color3DLUT(MultibandFilter):
|
||||||
"tuple of three integers.")
|
"tuple of three integers.")
|
||||||
except TypeError:
|
except TypeError:
|
||||||
size = (size, size, size)
|
size = (size, size, size)
|
||||||
|
size = map(int, size)
|
||||||
|
for size1D in size:
|
||||||
|
if not 2 <= size1D <= 65:
|
||||||
|
raise ValueError("Size should be in [2, 65] range.")
|
||||||
|
|
||||||
self.size = size
|
self.size = size
|
||||||
self.channels = channels
|
self.channels = channels
|
||||||
self.mode = target_mode
|
self.mode = target_mode
|
||||||
|
|
||||||
table = list(table)
|
table = list(table)
|
||||||
# Convert to a flat list
|
# Convert to a flat list
|
||||||
if isinstance(table[0], (list, tuple)):
|
if table and isinstance(table[0], (list, tuple)):
|
||||||
table = [
|
table, raw_table = [], table
|
||||||
pixel
|
for pixel in raw_table:
|
||||||
for pixel in table
|
if len(pixel) != channels:
|
||||||
if len(pixel) == channels
|
raise ValueError("The elements of the table should have "
|
||||||
for color in pixel
|
"a length of {}.".format(channels))
|
||||||
]
|
for color in pixel:
|
||||||
|
table.append(color)
|
||||||
|
|
||||||
if len(table) != channels * size[0] * size[1] * size[2]:
|
if len(table) != channels * size[0] * size[1] * size[2]:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"The table should have channels * size**3 float items "
|
"The table should have channels * size**3 float items "
|
||||||
"either size**3 items of channels-sized tuples with floats.")
|
"either size**3 items of channels-sized tuples with floats. "
|
||||||
|
"Table length: {}".format(len(table)))
|
||||||
self.table = table
|
self.table = table
|
||||||
|
|
||||||
def filter(self, image):
|
def filter(self, image):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user