progress
This commit is contained in:
parent
117b7d1bbe
commit
373afb692e
2 changed files with 46 additions and 8 deletions
|
|
@ -62,9 +62,15 @@ class Jp2k(Jp2kBox):
|
|||
raw codestream.
|
||||
shape : tuple
|
||||
Size of the image.
|
||||
|
||||
Properties
|
||||
----------
|
||||
ignore_pclr_cmap_cdef : bool
|
||||
Whether or not to ignore the pclr, cmap, or cdef boxes during any
|
||||
color transformation. Defaults to False.
|
||||
whether or not to ignore the pclr, cmap, or cdef boxes during any
|
||||
color transformation, defaults to False.
|
||||
verbose : bool
|
||||
whether or not to print informational messages produced by the
|
||||
OpenJPEG library, defaults to false
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
|
@ -100,7 +106,9 @@ class Jp2k(Jp2kBox):
|
|||
self._codec_format = None
|
||||
self._colorspace = None
|
||||
self._shape = None
|
||||
|
||||
self._ignore_pclr_cmap_cdef = False
|
||||
self._verbose = False
|
||||
|
||||
# Parse the file for JP2/JPX contents only if we are reading it.
|
||||
if mode == 'rb':
|
||||
|
|
@ -114,6 +122,14 @@ class Jp2k(Jp2kBox):
|
|||
def ignore_pclr_cmap_cdef(self, ignore_pclr_cmap_cdef):
|
||||
self._ignore_pclr_cmap_cdef = ignore_pclr_cmap_cdef
|
||||
|
||||
@property
|
||||
def verbose(self):
|
||||
return self._verbose
|
||||
|
||||
@verbose.setter
|
||||
def verbose(self, verbose):
|
||||
self._verbose = verbose
|
||||
|
||||
@property
|
||||
def shape(self):
|
||||
if self._shape is not None:
|
||||
|
|
@ -671,7 +687,11 @@ class Jp2k(Jp2kBox):
|
|||
codec = opj2.create_compress(self._cparams.codec_fmt)
|
||||
stack.callback(opj2.destroy_codec, codec)
|
||||
|
||||
info_handler = _INFO_CALLBACK if verbose else None
|
||||
if self._verbose or verbose:
|
||||
info_handler = _INFO_CALLBACK
|
||||
else:
|
||||
info_handler = None
|
||||
|
||||
opj2.set_info_handler(codec, info_handler)
|
||||
opj2.set_warning_handler(codec, _WARNING_CALLBACK)
|
||||
opj2.set_error_handler(codec, _ERROR_CALLBACK)
|
||||
|
|
@ -1183,7 +1203,8 @@ class Jp2k(Jp2kBox):
|
|||
|
||||
opj2.set_error_handler(codec, _ERROR_CALLBACK)
|
||||
opj2.set_warning_handler(codec, _WARNING_CALLBACK)
|
||||
if verbose:
|
||||
|
||||
if self._verbose or verbose:
|
||||
opj2.set_info_handler(codec, _INFO_CALLBACK)
|
||||
else:
|
||||
opj2.set_info_handler(codec, None)
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class TestCallbacks(unittest.TestCase):
|
|||
"Missing openjp2 library.")
|
||||
@unittest.skipIf(WARNING_INFRASTRUCTURE_ISSUE, WARNING_INFRASTRUCTURE_MSG)
|
||||
@unittest.skipIf(os.name == "nt", "Temporary file issue on window.")
|
||||
def test_info_callback_on_write(self):
|
||||
def test_info_callback_on_write_backwards_compatibility(self):
|
||||
"""Verify messages printed when writing an image in verbose mode."""
|
||||
j = glymur.Jp2k(self.jp2file)
|
||||
with self.assertWarns(UserWarning):
|
||||
|
|
@ -52,20 +52,37 @@ class TestCallbacks(unittest.TestCase):
|
|||
expected = '[INFO] tile number 1 / 1'
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
@unittest.skipIf(glymur.version.openjpeg_version[0] != '2',
|
||||
"Missing openjp2 library.")
|
||||
@unittest.skipIf(os.name == "nt", "Temporary file issue on window.")
|
||||
def test_info_callback_on_write(self):
|
||||
"""Verify messages printed when writing an image in verbose mode."""
|
||||
j = glymur.Jp2k(self.jp2file)
|
||||
tiledata = j[:]
|
||||
with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile:
|
||||
jp2 = glymur.Jp2k(tfile.name, 'wb')
|
||||
with patch('sys.stdout', new=StringIO()) as fake_out:
|
||||
jp2.verbose = True
|
||||
jp2[:] = tiledata
|
||||
actual = fake_out.getvalue().strip()
|
||||
expected = '[INFO] tile number 1 / 1'
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_info_callbacks_on_read(self):
|
||||
"""stdio output when info callback handler is enabled"""
|
||||
|
||||
# Verify that we get the expected stdio output when our internal info
|
||||
# callback handler is enabled.
|
||||
j = glymur.Jp2k(self.j2kfile)
|
||||
jp2 = glymur.Jp2k(self.j2kfile)
|
||||
with patch('sys.stdout', new=StringIO()) as fake_out:
|
||||
j.read(rlevel=1, verbose=True)
|
||||
jp2.verbose = True
|
||||
jp2[::2, ::2]
|
||||
actual = fake_out.getvalue().strip()
|
||||
|
||||
if glymur.version.openjpeg_version[0] == '2':
|
||||
lines = ['[INFO] Start to read j2k main header (0).',
|
||||
'[INFO] Main header has been correctly decoded.',
|
||||
'[INFO] No decoded area parameters, set the decoded area to the whole image',
|
||||
'[INFO] Setting decoding area to 0,0,480,800',
|
||||
'[INFO] Header of tile 0 / 0 has been read.',
|
||||
'[INFO] Tile 1/1 has been decoded.',
|
||||
'[INFO] Image data has been updated with tile 1.']
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue