Merge pull request #1856 from radarhere/eafp

Combined duplicate code in ImageTk
This commit is contained in:
wiredfool 2016-05-03 21:02:08 +01:00
commit 42f7a08ca4
2 changed files with 41 additions and 15 deletions

View File

@ -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

View File

@ -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()