From 001bee40ab42373cb3d120f6b7143d2b39aabff3 Mon Sep 17 00:00:00 2001 From: Pierrick Koch Date: Wed, 27 Apr 2016 15:23:44 +0200 Subject: [PATCH 1/4] [PIL] Image add support fromarray LA mode fix: >>> img = np.zeros((40,40,2), 'uint8') >>> Image.fromarray(img) Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1929, in fromarray raise TypeError("Cannot handle this data type") TypeError: Cannot handle this data type --- PIL/Image.py | 1 + 1 file changed, 1 insertion(+) diff --git a/PIL/Image.py b/PIL/Image.py index c0515d378..136f5134c 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2215,6 +2215,7 @@ _fromarray_typemap = { ((1, 1), ">f4"): ("F", "F;32BF"), ((1, 1), "f8"): ("F", "F;64BF"), + ((1, 1, 2), "|u1"): ("LA", "LA"), ((1, 1, 3), "|u1"): ("RGB", "RGB"), ((1, 1, 4), "|u1"): ("RGBA", "RGBA"), } From 272588fecae1be9c53566a33e19272deb8d66e85 Mon Sep 17 00:00:00 2001 From: Pierrick Koch Date: Thu, 28 Apr 2016 16:29:56 +0200 Subject: [PATCH 2/4] [PIL] Image add support _MODE_CONV LA mode --- PIL/Image.py | 1 + 1 file changed, 1 insertion(+) diff --git a/PIL/Image.py b/PIL/Image.py index 136f5134c..87868f8dc 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -245,6 +245,7 @@ _MODE_CONV = { # official modes "1": ('|b1', None), # broken "L": ('|u1', None), + "LA": ('|u1', 2), "I": (_ENDIAN + 'i4', None), "F": (_ENDIAN + 'f4', None), "P": ('|u1', None), From cb42a9383c08cebfd4a85d58b6308d74eb726a82 Mon Sep 17 00:00:00 2001 From: Pierrick Koch Date: Thu, 28 Apr 2016 16:30:43 +0200 Subject: [PATCH 3/4] [Test] image array add LA mode test --- Tests/test_image_array.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index ce8cbe78c..5aad8d3b3 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -19,6 +19,7 @@ class TestImageArray(PillowTestCase): # FIXME: wrong? self.assertEqual(test("F"), (3, (100, 128), Image._ENDIAN + 'f4', 51200)) + self.assertEqual(test("LA"), (3, (100, 128, 2), '|u1', 25600)) self.assertEqual(test("RGB"), (3, (100, 128, 3), '|u1', 38400)) self.assertEqual(test("RGBA"), (3, (100, 128, 4), '|u1', 51200)) self.assertEqual(test("RGBX"), (3, (100, 128, 4), '|u1', 51200)) @@ -35,6 +36,7 @@ class TestImageArray(PillowTestCase): self.assertEqual(test("L"), ("L", (128, 100), True)) self.assertEqual(test("I"), ("I", (128, 100), True)) self.assertEqual(test("F"), ("F", (128, 100), True)) + self.assertEqual(test("LA"), ("LA", (128, 100), True)) self.assertEqual(test("RGB"), ("RGB", (128, 100), True)) self.assertEqual(test("RGBA"), ("RGBA", (128, 100), True)) self.assertEqual(test("RGBX"), ("RGBA", (128, 100), True)) From 6f92a5adc04491c92cbf605caf25447c67775489 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 29 Apr 2016 21:01:35 +0100 Subject: [PATCH 4/4] Tests for LA mode looping through numpy --- Tests/test_numpy.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/test_numpy.py b/Tests/test_numpy.py index 4f2a5afb1..4af40c88b 100644 --- a/Tests/test_numpy.py +++ b/Tests/test_numpy.py @@ -64,6 +64,7 @@ class TestNumpy(PillowTestCase): self.assert_image(to_image(numpy.float32), "F", (10, 10)) self.assert_image(to_image(numpy.float64), "F", (10, 10)) + self.assert_image(to_image(numpy.uint8, 2), "LA", (10, 10)) self.assert_image(to_image(numpy.uint8, 3), "RGB", (10, 10)) self.assert_image(to_image(numpy.uint8, 4), "RGBA", (10, 10)) @@ -105,6 +106,7 @@ class TestNumpy(PillowTestCase): modes = [("L", 'uint8'), ("I", 'int32'), ("F", 'float32'), + ("LA", 'uint8'), ("RGB", 'uint8'), ("RGBA", 'uint8'), ("RGBX", 'uint8'),