diff --git a/glymur/codestream.py b/glymur/codestream.py index 3995306..efdf8c3 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -12,11 +12,23 @@ import warnings import numpy as np -from .core import _progression_order_display -from .core import _wavelet_transform_display +from .core import LRCP, RLCP, RPCL, PCRL, CPRL +from .core import WAVELET_TRANSFORM_9x7_IRREVERSIBLE +from .core import WAVELET_TRANSFORM_5x3_REVERSIBLE from .core import _capabilities_display from .lib import openjp2 as opj2 +_PROGRESSION_ORDER_DISPLAY = { + LRCP: 'LRCP', + RLCP: 'RLCP', + RPCL: 'RPCL', + PCRL: 'PCRL', + CPRL: 'CPRL'} + +_WAVELET_TRANSFORM_DISPLAY = { + WAVELET_TRANSFORM_9x7_IRREVERSIBLE: '9-7 irreversible', + WAVELET_TRANSFORM_5x3_REVERSIBLE: '5-3 reversible'} + # Need a catch-all list of valid markers. # See table A-1 in ISO/IEC FCD15444-1. _VALID_MARKERS = [0xff00, 0xff01, 0xfffe] @@ -493,7 +505,7 @@ class COCsegment(Segment): msg = msg.format(self.spcoc[0] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.spcoc[4]]) + _WAVELET_TRANSFORM_DISPLAY[self.spcoc[4]]) msg += '\n ' msg += _context_string(self.spcoc[3]) @@ -587,13 +599,13 @@ class CODsegment(Segment): ' Wavelet transform: {6}'] msg += '\n '.join(lines) - msg = msg.format(_progression_order_display[self.spcod[0]], + msg = msg.format(_PROGRESSION_ORDER_DISPLAY[self.spcod[0]], self._layers, mct, self.spcod[4] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.spcod[8]]) + _WAVELET_TRANSFORM_DISPLAY[self.spcod[8]]) msg += '\n Precinct size: ' if self._precinct_size is None: @@ -770,7 +782,7 @@ class PODsegment(Segment): self.lyepod[j], self.repod[j], self.cdpod[j], - _progression_order_display[self.ppod[j]]) + _PROGRESSION_ORDER_DISPLAY[self.ppod[j]]) return msg diff --git a/glymur/core.py b/glymur/core.py index 05af436..71c08cd 100644 --- a/glymur/core.py +++ b/glymur/core.py @@ -5,14 +5,7 @@ RPCL = 2 PCRL = 3 CPRL = 4 -_progression_order_display = { - LRCP: 'LRCP', - RLCP: 'RLCP', - RPCL: 'RPCL', - PCRL: 'PCRL', - CPRL: 'CPRL'} - -progression_order = { +PROGRESSION_ORDER = { 'LRCP': LRCP, 'RLCP': RLCP, 'RPCL': RPCL, @@ -22,27 +15,11 @@ progression_order = { WAVELET_TRANSFORM_9x7_IRREVERSIBLE = 0 WAVELET_TRANSFORM_5x3_REVERSIBLE = 1 -_wavelet_transform_display = { - WAVELET_TRANSFORM_9x7_IRREVERSIBLE: '9-7 irreversible', - WAVELET_TRANSFORM_5x3_REVERSIBLE: '5-3 reversible'} - ENUMERATED_COLORSPACE = 1 RESTRICTED_ICC_PROFILE = 2 ANY_ICC_PROFILE = 3 VENDOR_COLOR_METHOD = 4 -_method_display = { - ENUMERATED_COLORSPACE: 'enumerated colorspace', - RESTRICTED_ICC_PROFILE: 'restricted ICC profile', - ANY_ICC_PROFILE: 'any ICC profile', - VENDOR_COLOR_METHOD: 'vendor color method'} - -_ = {1: 'accurately represents correct colorspace definition', - 2: 'approximates correct colorspace definition, exceptional quality', - 3: 'approximates correct colorspace definition, reasonable quality', - 4: 'approximates correct colorspace definition, poor quality'} -_approximation_display = _ - # Registration values for comment markers. RCME_BINARY = 0 # binary value comments RCME_ISO_8859_1 = 1 # comments in latin-1 codec @@ -98,11 +75,6 @@ _capabilities_display = { 3: '3'} # Reader requirements -#RREQ_UNRESTRICTED_JPEG2000_PART_1 = 5 -#RREQ_UNRESTRICTED_JPEG2000_PART_2 = 6 -#RREQ_CMYK_ENUMERATED_COLORSPACE = 55 -#RREQ_E_SRGB_ENUMERATED_COLORSPACE = 60 -#RREQ_ROMM_RGB_ENUMERATED_COLORSPACE = 61 _reader_requirements_display = { 0: 'File not completely understood', 1: 'Deprecated', diff --git a/glymur/jp2box.py b/glymur/jp2box.py index a608e5f..b12af8d 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -27,12 +27,23 @@ import xml.etree.cElementTree as ET import numpy as np from .codestream import Codestream -from .core import _approximation_display from .core import _colorspace_map_display from .core import _color_type_map_display -from .core import _method_display from .core import _reader_requirements_display -from .core import ENUMERATED_COLORSPACE +from .core import ENUMERATED_COLORSPACE, RESTRICTED_ICC_PROFILE +from .core import ANY_ICC_PROFILE, VENDOR_COLOR_METHOD + +_METHOD_DISPLAY = { + ENUMERATED_COLORSPACE: 'enumerated colorspace', + RESTRICTED_ICC_PROFILE: 'restricted ICC profile', + ANY_ICC_PROFILE: 'any ICC profile', + VENDOR_COLOR_METHOD: 'vendor color method'} + +_ = {1: 'accurately represents correct colorspace definition', + 2: 'approximates correct colorspace definition, exceptional quality', + 3: 'approximates correct colorspace definition, reasonable quality', + 4: 'approximates correct colorspace definition, poor quality'} +_approximation_display = _ class Jp2kBox(object): @@ -189,7 +200,7 @@ class ColourSpecificationBox(Jp2kBox): def __str__(self): msg = Jp2kBox.__str__(self) - msg += '\n Method: {0}'.format(_method_display[self.method]) + msg += '\n Method: {0}'.format(_METHOD_DISPLAY[self.method]) msg += '\n Precedence: {0}'.format(self.precedence) if self.approximation is not 0: diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 1677954..abc54e2 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -21,7 +21,7 @@ import numpy as np from .codestream import Codestream from .core import SRGB from .core import GREYSCALE -from .core import progression_order +from .core import PROGRESSION_ORDER from .jp2box import Jp2kBox from .jp2box import JPEG2000SignatureBox from .jp2box import FileTypeBox @@ -286,7 +286,7 @@ class Jp2k(Jp2kBox): if prog is not None: prog = prog.upper() - cparams.prog_order = progression_order[prog] + cparams.prog_order = PROGRESSION_ORDER[prog] if psnr is not None: cparams.tcp_numlayers = len(psnr) @@ -475,9 +475,11 @@ class Jp2k(Jp2kBox): raise IOError(msg) # jp2c must be preceeded by jp2h - jp2h_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2h'] + jp2h_lst = [idx for (idx, box) in enumerate(boxes) + if box.box_id == 'jp2h'] jp2h_idx = jp2h_lst[0] - jp2c_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2c'] + jp2c_lst = [idx for (idx, box) in enumerate(boxes) + if box.box_id == 'jp2c'] if len(jp2c_lst) == 0: msg = "A codestream box must be defined in the outermost " msg += "list of boxes." @@ -496,7 +498,8 @@ class Jp2k(Jp2kBox): raise IOError(msg) # colr must be present in jp2 header box. - colr_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'colr'] + colr_lst = [j for (j, box) in enumerate(jp2h.box) + if box.box_id == 'colr'] if len(colr_lst) == 0: msg = "The jp2 header box must contain a color definition box." raise IOError(msg) @@ -509,7 +512,8 @@ class Jp2k(Jp2kBox): msg += "following the image header." raise IOError(msg) - cdef_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'cdef'] + cdef_lst = [j for (j, box) in enumerate(jp2h.box) + if box.box_id == 'cdef'] if len(cdef_lst) > 1: msg = "Only one channel definition box is allowed in the " msg += "JP2 header." @@ -717,7 +721,8 @@ class Jp2k(Jp2kBox): with warnings.catch_warnings(): warnings.simplefilter("ignore") nelts = nrows * ncols - band = np.ctypeslib.as_array((ctypes.c_int32 * nelts).from_address(addr)) + band = np.ctypeslib.as_array( + (ctypes.c_int32 * nelts).from_address(addr)) data[:, :, k] = np.reshape(band.astype(dtype), (nrows, ncols)) diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index f780725..763b6e9 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4035,7 +4035,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact ?? self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -4077,7 +4078,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact?? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -4123,7 +4125,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -4169,7 +4172,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.GREYSCALE) @@ -4211,7 +4215,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 2) # enumerated + self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 546) @@ -4219,7 +4223,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[2].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[2].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[2].precedence, 1) self.assertEqual(jp2.box[3].box[2].approximation, 1) # JPX exact self.assertIsNone(jp2.box[3].box[2].icc_profile) @@ -4257,7 +4262,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -4306,7 +4312,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 2) + self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 13332) @@ -4314,7 +4320,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[2].method, 1) # enumerated cspace + self.assertEqual(jp2.box[3].box[2].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[2].precedence, 1) self.assertEqual(jp2.box[3].box[2].approximation, 1) # JPX exact self.assertIsNone(jp2.box[3].box[2].icc_profile) @@ -4355,7 +4362,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # enumerated + self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[2].box[1].icc_profile['Size'], 414) @@ -4427,7 +4434,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[3].method, 1) + self.assertEqual(jp2.box[2].box[3].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[3].precedence, 0) self.assertEqual(jp2.box[2].box[3].approximation, 1) # JPX exact self.assertIsNone(jp2.box[2].box[3].icc_profile) @@ -5904,7 +5912,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # not allowed? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6037,7 +6046,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6165,7 +6175,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -6305,7 +6316,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6416,7 +6428,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6516,7 +6529,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # ICC + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6613,7 +6627,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.GREYSCALE) @@ -6732,7 +6747,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.CMYK) @@ -6846,7 +6862,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6954,7 +6971,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -7061,7 +7079,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # res icc + self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # res icc self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -7160,7 +7178,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # restricted icc + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -7262,7 +7281,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 3) # any icc + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ANY_ICC_PROFILE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 1328)