From d82935a2d9c2d5624942c6526884ed6fb3f150d1 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 May 2016 20:55:12 +1000 Subject: [PATCH 1/2] Combined duplicate code in ImageTk --- PIL/ImageTk.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/PIL/ImageTk.py b/PIL/ImageTk.py index 68d388e74..7518cc1a5 100644 --- a/PIL/ImageTk.py +++ b/PIL/ImageTk.py @@ -33,6 +33,7 @@ except ImportError: del Tkinter from PIL import Image +from io import BytesIO # -------------------------------------------------------------------- @@ -52,6 +53,15 @@ def _pilbitmap_check(): _pilbitmap_ok = 0 return _pilbitmap_ok +def _get_image_from_kw(kw): + source = None + if "file" in kw: + source = kw.pop("file") + elif "data" in kw: + source = BytesIO(kw.pop("data")) + if source: + return Image.open(source) + # -------------------------------------------------------------------- # PhotoImage @@ -80,13 +90,7 @@ class PhotoImage(object): # Tk compatibility: file or data if image is None: - if "file" in kw: - image = Image.open(kw["file"]) - del kw["file"] - elif "data" in kw: - from io import BytesIO - image = Image.open(BytesIO(kw["data"])) - del kw["data"] + image = _get_image_from_kw(kw) if hasattr(image, "mode") and hasattr(image, "size"): # got an image instead of a mode @@ -209,13 +213,7 @@ class BitmapImage(object): # Tk compatibility: file or data if image is None: - if "file" in kw: - image = Image.open(kw["file"]) - del kw["file"] - elif "data" in kw: - from io import BytesIO - image = Image.open(BytesIO(kw["data"])) - del kw["data"] + image = _get_image_from_kw(kw) self.__mode = image.mode self.__size = image.size From 0b515ae3fa6b716e7de4eb26be4a5032b69c5843 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 May 2016 22:19:52 +1000 Subject: [PATCH 2/2] Added test for ImageTk _get_image_from_kw --- Tests/test_imagetk.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Tests/test_imagetk.py b/Tests/test_imagetk.py index 87a07e288..1c265f650 100644 --- a/Tests/test_imagetk.py +++ b/Tests/test_imagetk.py @@ -1,15 +1,43 @@ from helper import unittest, PillowTestCase +from PIL import Image +try: + from PIL import ImageTk + dir(ImageTk) +except (OSError, ImportError) as v: + # Skipped via setUp() + pass class TestImageTk(PillowTestCase): - def test_import(self): + def setUp(self): try: from PIL import ImageTk dir(ImageTk) except (OSError, ImportError) as v: self.skipTest(v) + def test_kw(self): + TEST_JPG = "Tests/images/hopper.jpg" + TEST_PNG = "Tests/images/hopper.png" + im1 = Image.open(TEST_JPG) + im2 = Image.open(TEST_PNG) + with open(TEST_PNG, 'rb') as fp: + data = fp.read() + kw = {"file":TEST_JPG, "data":data} + + # Test "file" + im = ImageTk._get_image_from_kw(kw) + self.assert_image_equal(im, im1) + + # Test "data" + im = ImageTk._get_image_from_kw(kw) + self.assert_image_equal(im, im2) + + # Test no relevant entry + im = ImageTk._get_image_from_kw(kw) + self.assertEqual(im, None) + if __name__ == '__main__': unittest.main()