From 4ca1f49d2002656a1ab8e6b8fe41cce8c90aa306 Mon Sep 17 00:00:00 2001 From: Connelly Barnes Date: Sun, 30 Aug 2015 11:51:04 -0400 Subject: [PATCH 1/2] fix scikit-image bug #1680 (grayscale png round trip fails) and add unit test --- skimage/io/_plugins/pil_plugin.py | 3 +++ skimage/io/tests/test_pil.py | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index bb013b0b..4028f3e1 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -87,6 +87,9 @@ def pil_to_ndarray(im, dtype=None, img_num=None): i += 1 continue + if im.format == 'PNG' and im.mode == 'I' and dtype is None: + dtype = 'uint16' + if im.mode == 'P': if grayscale is None: grayscale = _palette_is_grayscale(im) diff --git a/skimage/io/tests/test_pil.py b/skimage/io/tests/test_pil.py index 935dc6a7..3d0bfe54 100644 --- a/skimage/io/tests/test_pil.py +++ b/skimage/io/tests/test_pil.py @@ -6,7 +6,7 @@ from numpy.testing import ( from tempfile import NamedTemporaryFile -from ... import data_dir +from ... import data_dir, img_as_float from .. import imread, imsave, use_plugin, reset_plugins from ..._shared.testing import mono_check, color_check from ..._shared._warnings import expected_warnings @@ -39,6 +39,13 @@ def setup_module(self): except ImportError: pass +def test_png_round_trip(): + f = NamedTemporaryFile(suffix='.png') + fname = f.name + I = np.eye(3) + imsave(fname, I) + Ip = img_as_float(imread(fname)) + assert np.sum(np.abs(Ip-I)) < 1e-3 def test_imread_flatten(): # a color image is flattened From 28a4fcd37e993c90594c565f630731a1bf0bc4f4 Mon Sep 17 00:00:00 2001 From: Connelly Barnes Date: Sun, 30 Aug 2015 21:20:28 -0400 Subject: [PATCH 2/2] fix permissions issue in test_pil.py function test_png_round_trip() --- skimage/io/tests/test_pil.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skimage/io/tests/test_pil.py b/skimage/io/tests/test_pil.py index 3d0bfe54..3a53d340 100644 --- a/skimage/io/tests/test_pil.py +++ b/skimage/io/tests/test_pil.py @@ -42,9 +42,11 @@ def setup_module(self): def test_png_round_trip(): f = NamedTemporaryFile(suffix='.png') fname = f.name + f.close() I = np.eye(3) imsave(fname, I) Ip = img_as_float(imread(fname)) + os.remove(fname) assert np.sum(np.abs(Ip-I)) < 1e-3 def test_imread_flatten():