From c59cd1c4967b3e2b82e67ad456b0b50324d0bbc8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 18:50:42 -0500 Subject: [PATCH 1/6] Catch PIL imread problems early and generate error message --- skimage/io/_plugins/pil_plugin.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index eb6467df..9a56c0be 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -29,7 +29,11 @@ def imread(fname, dtype=None): """ im = Image.open(fname) - return pil_to_ndarray(im, dtype) + try: + return pil_to_ndarray(im, dtype) + except IOError: + raise ValueError('Could not load "%s": make sure you have library ' + 'support for "%s" files' % (fname, im.format)) def pil_to_ndarray(im, dtype=None): @@ -55,6 +59,8 @@ def pil_to_ndarray(im, dtype=None): im.shape = shape[::-1] elif 'A' in im.mode: im = im.convert('RGBA') + # this will raise an IOError if the file is not readable + im.getdata()[0] im = np.array(im, dtype=dtype) if fp is not None: fp.close() From adae753c427f64765a3158f2ba61ad6117fff80f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 18:52:23 -0500 Subject: [PATCH 2/6] Fix indent --- skimage/io/_plugins/pil_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index 9a56c0be..ac86e645 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -32,8 +32,8 @@ def imread(fname, dtype=None): try: return pil_to_ndarray(im, dtype) except IOError: - raise ValueError('Could not load "%s": make sure you have library ' - 'support for "%s" files' % (fname, im.format)) + raise ValueError('Could not load "%s": make sure you have library ' + 'support for "%s" files' % (fname, im.format)) def pil_to_ndarray(im, dtype=None): From 688f669181a95766a2992ca5b18d3928466844b6 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 19:25:42 -0500 Subject: [PATCH 3/6] Perform im.getdata check up front --- skimage/io/_plugins/pil_plugin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index ac86e645..218a9903 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -30,10 +30,13 @@ def imread(fname, dtype=None): """ im = Image.open(fname) try: - return pil_to_ndarray(im, dtype) + # this will raise an IOError if the file is not readable + im.getdata()[0] except IOError: raise ValueError('Could not load "%s": make sure you have library ' 'support for "%s" files' % (fname, im.format)) + else: + return pil_to_ndarray(im, dtype) def pil_to_ndarray(im, dtype=None): @@ -59,8 +62,6 @@ def pil_to_ndarray(im, dtype=None): im.shape = shape[::-1] elif 'A' in im.mode: im = im.convert('RGBA') - # this will raise an IOError if the file is not readable - im.getdata()[0] im = np.array(im, dtype=dtype) if fp is not None: fp.close() From 7e33ee75e8b347f5f8cfe28cb7a923c2a5b1c19c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 19:33:22 -0500 Subject: [PATCH 4/6] Clean up error message. --- skimage/io/_plugins/pil_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index 218a9903..751194e5 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -33,8 +33,8 @@ def imread(fname, dtype=None): # this will raise an IOError if the file is not readable im.getdata()[0] except IOError: - raise ValueError('Could not load "%s": make sure you have library ' - 'support for "%s" files' % (fname, im.format)) + raise ValueError('Could not load "%s": make sure you have external library ' + 'installed for "%s" files' % (fname, im.format)) else: return pil_to_ndarray(im, dtype) From 53760e3d8710429da1e9611645248d936dbb2455 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 19:39:50 -0500 Subject: [PATCH 5/6] Point user to Pillow docs for external libraries --- skimage/io/_plugins/pil_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index 751194e5..8ad51dba 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -33,8 +33,8 @@ def imread(fname, dtype=None): # this will raise an IOError if the file is not readable im.getdata()[0] except IOError: - raise ValueError('Could not load "%s": make sure you have external library ' - 'installed for "%s" files' % (fname, im.format)) + site = "http://pillow.readthedocs.org/en/latest/installation.html#external-libraries" + raise ValueError('Could not load "%s"\nPlease see documentation at %s' % (fname, site)) else: return pil_to_ndarray(im, dtype) From 8758ce9f93421d4aff8450cd88a5bb001af41db8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 19 Sep 2014 19:40:41 -0500 Subject: [PATCH 6/6] Minor formatting of error message --- skimage/io/_plugins/pil_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index 8ad51dba..f45084ce 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -34,7 +34,7 @@ def imread(fname, dtype=None): im.getdata()[0] except IOError: site = "http://pillow.readthedocs.org/en/latest/installation.html#external-libraries" - raise ValueError('Could not load "%s"\nPlease see documentation at %s' % (fname, site)) + raise ValueError('Could not load "%s"\nPlease see documentation at: %s' % (fname, site)) else: return pil_to_ndarray(im, dtype)