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..3a53d340 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,15 @@ def setup_module(self): except ImportError: pass +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(): # a color image is flattened