Files
scikit-image/skimage/io/tests/test_freeimage.py
T
Matt McCormick db4cc04a90 BUG: Fix tests when FreeImage is not installed.
The plugin loader tries plugins but only catches ImportError and
RuntimeError.  The FreeImage plugin was throwing OSError.  Tests
were failing when FreeImage was not installed.  It now throws a
RuntimeError.
2012-07-20 15:46:58 -04:00

97 lines
2.8 KiB
Python

import os
import skimage as si
import skimage.io as sio
import numpy as np
from numpy.testing import *
from numpy.testing.decorators import skipif
from tempfile import NamedTemporaryFile
try:
import skimage.io._plugins.freeimage_plugin as fi
FI_available = True
sio.use_plugin('freeimage')
except RuntimeError:
FI_available = False
def setup_module(self):
"""The effect of the `plugin.use` call may be overridden by later imports.
Call `use_plugin` directly before the tests to ensure that freeimage is
used.
"""
try:
sio.use_plugin('freeimage')
except RuntimeError:
pass
def teardown():
sio.reset_plugins()
@skipif(not FI_available)
def test_imread():
img = sio.imread(os.path.join(si.data_dir, 'color.png'))
assert img.shape == (370, 371, 3)
assert all(img[274, 135] == [0, 130, 253])
@skipif(not FI_available)
def test_imread_uint16():
expected = np.load(os.path.join(si.data_dir, 'chessboard_GRAY_U8.npy'))
img = sio.imread(os.path.join(si.data_dir, 'chessboard_GRAY_U16.tif'))
assert img.dtype == np.uint16
assert_array_almost_equal(img, expected)
@skipif(not FI_available)
def test_imread_uint16_big_endian():
expected = np.load(os.path.join(si.data_dir, 'chessboard_GRAY_U8.npy'))
img = sio.imread(os.path.join(si.data_dir, 'chessboard_GRAY_U16B.tif'))
assert img.dtype == np.uint16
assert_array_almost_equal(img, expected)
class TestSave:
def roundtrip(self, dtype, x, suffix):
f = NamedTemporaryFile(suffix='.' + suffix)
fname = f.name
f.close()
sio.imsave(fname, x)
y = sio.imread(fname)
assert_array_equal(x, y)
@skipif(not FI_available)
def test_imsave_roundtrip(self):
for shape, dtype, format in [
[(10, 10), (np.uint8, np.uint16), ('tif', 'png')],
[(10, 10), (np.float32,), ('tif',)],
[(10, 10, 3), (np.uint8,), ('png',)],
[(10, 10, 4), (np.uint8,), ('png',)]
]:
tests = [(d, f) for d in dtype for f in format]
for d, f in tests:
x = np.ones(shape, dtype=d) * np.random.random(shape)
if not np.issubdtype(d, float):
x = (x * 255).astype(d)
yield self.roundtrip, d, x, f
@skipif(not FI_available)
def test_metadata():
meta = fi.read_metadata(os.path.join(si.data_dir, 'multipage.tif'))
assert meta[('EXIF_MAIN', 'Orientation')] == 1
assert meta[('EXIF_MAIN', 'Software')].startswith('ImageMagick')
meta = fi.read_multipage_metadata(os.path.join(si.data_dir,
'multipage.tif'))
assert len(meta) == 2
assert meta[0][('EXIF_MAIN', 'Orientation')] == 1
assert meta[1][('EXIF_MAIN', 'Software')].startswith('ImageMagick')
if __name__ == "__main__":
run_module_suite()