Skip to content

Commit b157b8f

Browse files
committed
RF: trying to use output_dtype
1 parent 26f3741 commit b157b8f

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

nipy/io/files.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ def load(filename):
5151
return nifti2nipy(ni_img)
5252

5353

54-
def save(img, filename, io_dtype=None):
54+
def save(img, filename, dtype_from='data'):
5555
"""Write the image to a file.
5656
5757
Parameters
5858
----------
5959
img : An `Image` object
6060
filename : string
6161
Should be a valid filename.
62-
io_dtype : None or dtype specifier, optional
62+
dtype_from : {'data', 'header'} or dtype specifier, optional
6363
dtype to save data to disk. Set into header before save as hint for
6464
output format to chose dtype to save to. Not every format supports every
6565
dtype, so some values of this parameter will raise errors. The default
@@ -127,11 +127,17 @@ def save(img, filename, io_dtype=None):
127127
saver = nib.spm2analyze.save
128128
else:
129129
raise ValueError('Cannot save file type "%s"' % ftype)
130+
dtype_from_str = isinstance(dtype_from, basestring)
131+
if dtype_from_str and dtype_from == 'header':
132+
saver(ni_img, filename)
133+
return img
130134
# Set output dtype if possible
131135
hdr = ni_img.get_header()
132-
# Set io dtype if possible
133-
if not io_dtype is None:
134-
hdr.set_data_dtype(io_dtype)
136+
if dtype_from_str and dtype_from == 'data':
137+
io_dtype = img.get_data().dtype
138+
else:
139+
io_dtype = dtype_from
140+
hdr.set_data_dtype(io_dtype)
135141
# make new image
136142
saver(ni_img, filename)
137143
return img

nipy/io/tests/test_image_io.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ def randimg_in2out(rng, in_dtype, out_dtype, name):
8484
data = data.astype(in_dtype)
8585
img = Image(data, AfT('kji', 'zxy', np.eye(4)))
8686
# The io_dtype won't be visible until the image is loaded
87-
newimg = save_image(img, name, io_dtype=out_dtype)
87+
newimg = save_image(img, name, dtype_from=out_dtype)
8888
return newimg.get_data(), data
8989

9090

9191
def test_scaling_io_dtype():
92-
# Does io_dtype get set?
92+
# Does data dtype get set?
9393
# Is scaling correctly applied?
9494
rng = np.random.RandomState(19660520) # VBD
9595
ulp1_f32 = np.finfo(np.float32).eps
@@ -125,6 +125,11 @@ def test_scaling_io_dtype():
125125
del img
126126

127127

128+
def test_from_data():
129+
# Default data dtype comes from data
130+
pass
131+
132+
128133
def test_header_roundtrip():
129134
img = load_image(anatfile)
130135
hdr = img.metadata['header']

0 commit comments

Comments
 (0)