__setitem__ working for writing an entire image at once
This commit is contained in:
parent
a580fe5097
commit
b1cd14c6a5
3 changed files with 36 additions and 8 deletions
|
|
@ -347,7 +347,7 @@ image isn't square. ::
|
||||||
>>> alpha[mask] = 0
|
>>> alpha[mask] = 0
|
||||||
>>> rgba = np.concatenate((rgb, alpha), axis=2)
|
>>> rgba = np.concatenate((rgb, alpha), axis=2)
|
||||||
>>> jp2 = Jp2k('tmp.jp2', 'wb')
|
>>> jp2 = Jp2k('tmp.jp2', 'wb')
|
||||||
>>> jp2.write(rgba)
|
>>> jp2[:] = rgba
|
||||||
|
|
||||||
Next we need to specify what types of channels we have.
|
Next we need to specify what types of channels we have.
|
||||||
The first three channels are color channels, but we identify the fourth as
|
The first three channels are color channels, but we identify the fourth as
|
||||||
|
|
@ -447,7 +447,7 @@ http://photojournal.jpl.nasa.gov/tiff/PIA17145.tif info JPEG 2000::
|
||||||
>>> image = skimage.io.imread('PIA17145.tif')
|
>>> image = skimage.io.imread('PIA17145.tif')
|
||||||
>>> from glymur import Jp2k
|
>>> from glymur import Jp2k
|
||||||
>>> jp2 = Jp2k('PIA17145.jp2', 'wb')
|
>>> jp2 = Jp2k('PIA17145.jp2', 'wb')
|
||||||
>>> jp2.write(image)
|
>>> jp2[:] = image
|
||||||
|
|
||||||
Next you can extract the XMP metadata.
|
Next you can extract the XMP metadata.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -759,6 +759,22 @@ class Jp2k(Jp2kBox):
|
||||||
|
|
||||||
return boxes
|
return boxes
|
||||||
|
|
||||||
|
def __setitem__(self, index, data):
|
||||||
|
"""
|
||||||
|
Slicing protocol.
|
||||||
|
"""
|
||||||
|
if isinstance(index, slice) and (
|
||||||
|
index.start == None and
|
||||||
|
index.stop == None and
|
||||||
|
index.step == None):
|
||||||
|
# Case of jp2[:] = data, i.e. write the entire image.
|
||||||
|
#
|
||||||
|
# Should have a slice object where start = stop = step = None
|
||||||
|
self.write(data)
|
||||||
|
else:
|
||||||
|
msg = "Images currently must be written entirely at once."
|
||||||
|
raise TypeError(msg)
|
||||||
|
|
||||||
def __getitem__(self, pargs):
|
def __getitem__(self, pargs):
|
||||||
"""
|
"""
|
||||||
Slicing protocol.
|
Slicing protocol.
|
||||||
|
|
|
||||||
|
|
@ -75,38 +75,50 @@ class TestSliceProtocolBaseWrite(SliceProtocolBase):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
j[:] = self.j2k_data
|
j[:] = self.j2k_data
|
||||||
expected = j.read()
|
actual = j.read()
|
||||||
|
|
||||||
np.testing.assert_array_equal(actual, expected)
|
np.testing.assert_array_equal(actual, expected)
|
||||||
|
|
||||||
|
def test_cannot_write_with_non_default_single_slice(self):
|
||||||
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
|
j = Jp2k(tfile.name, 'wb')
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
j[slice(None, 0)] = self.j2k_data
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
j[slice(0, None)] = self.j2k_data
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
j[slice(0, 0, None)] = self.j2k_data
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
j[slice(0, 640)] = self.j2k_data
|
||||||
|
|
||||||
def test_cannot_write_a_row(self):
|
def test_cannot_write_a_row(self):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
with self.assertRaises(IOError):
|
with self.assertRaises(TypeError):
|
||||||
j[5] = self.j2k_data
|
j[5] = self.j2k_data
|
||||||
|
|
||||||
def test_cannot_write_a_pixel(self):
|
def test_cannot_write_a_pixel(self):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
with self.assertRaises(IOError):
|
with self.assertRaises(TypeError):
|
||||||
j[25, 35] = self.j2k_data[25, 35]
|
j[25, 35] = self.j2k_data[25, 35]
|
||||||
|
|
||||||
def test_cannot_write_a_column(self):
|
def test_cannot_write_a_column(self):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
with self.assertRaises(IOError):
|
with self.assertRaises(TypeError):
|
||||||
j[:, 25, :] = self.j2k_data[:, :25, :]
|
j[:, 25, :] = self.j2k_data[:, :25, :]
|
||||||
|
|
||||||
def test_cannot_write_a_band(self):
|
def test_cannot_write_a_band(self):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
with self.assertRaises(IOError):
|
with self.assertRaises(TypeError):
|
||||||
j[:, :, 0] = self.j2k_data[:, :, 0]
|
j[:, :, 0] = self.j2k_data[:, :, 0]
|
||||||
|
|
||||||
def test_cannot_write_a_subarray(self):
|
def test_cannot_write_a_subarray(self):
|
||||||
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile:
|
||||||
j = Jp2k(tfile.name, 'wb')
|
j = Jp2k(tfile.name, 'wb')
|
||||||
with self.assertRaises(IOError):
|
with self.assertRaises(TypeError):
|
||||||
j[:25, :45, :] = self.j2k_data[:25, :25, :]
|
j[:25, :45, :] = self.j2k_data[:25, :25, :]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue