diff --git a/requirements.txt b/requirements.txt index 8b97dd4b..19c541f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,5 @@ numpy>=1.6.1 scipy>=0.9.0 six>=1.4 networkx>=1.8 -pillow>=1.7.8 +pillow>=2.1.0 dask[array]>=0.5.0 diff --git a/skimage/data/foo3x5x4indexed.png b/skimage/data/foo3x5x4indexed.png new file mode 100644 index 00000000..cc969d03 Binary files /dev/null and b/skimage/data/foo3x5x4indexed.png differ diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index 7cb8e5c1..59811dd2 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -85,7 +85,10 @@ def pil_to_ndarray(im, dtype=None, img_num=None): if grayscale: frame = im.convert('L') else: - frame = im.convert('RGB') + if im.format == 'PNG' and 'transparency' in im.info: + frame = im.convert('RGBA') + else: + frame = im.convert('RGB') elif im.mode == '1': frame = im.convert('L') diff --git a/skimage/io/tests/test_pil.py b/skimage/io/tests/test_pil.py index ad3870a6..ee962906 100644 --- a/skimage/io/tests/test_pil.py +++ b/skimage/io/tests/test_pil.py @@ -84,6 +84,28 @@ def test_imread_palette(): assert img.ndim == 3 +def test_imread_index_png_with_alpha(): + # The file `foo3x5x4indexed.png` was created with this array + # (3x5 is (height)x(width)): + data = np.array([[[127, 0, 255, 255], + [127, 0, 255, 255], + [127, 0, 255, 255], + [127, 0, 255, 255], + [127, 0, 255, 255]], + [[192, 192, 255, 0], + [192, 192, 255, 0], + [0, 0, 255, 0], + [0, 0, 255, 0], + [0, 0, 255, 0]], + [[0, 31, 255, 255], + [0, 31, 255, 255], + [0, 31, 255, 255], + [0, 31, 255, 255], + [0, 31, 255, 255]]], dtype=np.uint8) + img = imread(os.path.join(data_dir, 'foo3x5x4indexed.png')) + assert_array_equal(img, data) + + def test_palette_is_gray(): gray = Image.open(os.path.join(data_dir, 'palette_gray.png')) assert _palette_is_grayscale(gray) diff --git a/tools/travis_before_install.sh b/tools/travis_before_install.sh index 159fc2d3..8f131102 100755 --- a/tools/travis_before_install.sh +++ b/tools/travis_before_install.sh @@ -40,9 +40,6 @@ fi # test minimum requirements on 2.7 if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then sed -i 's/>=/==/g' requirements.txt - # PIL instead of Pillow - sed -i 's/pillow.*/pil==1.1.7/g' requirements.txt - WHEELBINARIES=${WHEELBINARIES/pillow/pil} fi # create new empty venv