Added support for jplh, jpch, cmap, res , resd, resc #133

This commit is contained in:
John Evans 2013-10-23 08:07:15 -04:00
commit 3ad31c91b8
2 changed files with 82 additions and 9 deletions

View file

@ -554,11 +554,15 @@ class CodestreamHeaderBox(Jp2kBox):
box : list
List of boxes contained in this superbox.
"""
def __init__(self, length=0, offset=-1):
def __init__(self, box=[], length=0, offset=-1):
Jp2kBox.__init__(self, box_id='jpch', longname='Codestream Header')
self.length = length
self.offset = offset
self.box = []
self.box = box
def __repr__(self):
msg = "glymur.jp2box.CodestreamHeaderBox(box={0})".format(self.box)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
@ -612,13 +616,18 @@ class CompositingLayerHeaderBox(Jp2kBox):
box : list
List of boxes contained in this superbox.
"""
def __init__(self, length=0, offset=-1):
def __init__(self, box=[], length=0, offset=-1):
Jp2kBox.__init__(self, box_id='jplh',
longname='Compositing Layer Header')
self.length = length
self.offset = offset
self.box = []
def __repr__(self):
msg = "glymur.jp2box.CompositingLayerHeaderBox(box={0})"
msg = msg.format(self.box)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
for box in self.box:
@ -667,11 +676,11 @@ class ComponentMappingBox(Jp2kBox):
Offset of the box from the start of the file.
longname : str
Verbose description of the box.
component_index : int
component_index : tuple
Index of component in codestream that is mapped to this channel.
mapping_type : int
mapping_type : tuple
mapping type, either direct use (0) or palette (1)
palette_index : int
palette_index : tuple
Index component from palette
"""
def __init__(self, component_index, mapping_type, palette_index,
@ -683,6 +692,14 @@ class ComponentMappingBox(Jp2kBox):
self.length = length
self.offset = offset
def __repr__(self):
msg = "glymur.jp2box.ComponentMappingBox("
msg += "component_index={0}, mapping_type={1}, palette_index={2})"
msg = msg.format(self.component_index,
self.mapping_type,
self.palette_index)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
@ -1610,11 +1627,16 @@ class ResolutionBox(Jp2kBox):
box : list
List of boxes contained in this superbox.
"""
def __init__(self, length=0, offset=-1):
def __init__(self, box=[], length=0, offset=-1):
Jp2kBox.__init__(self, box_id='res ', longname='Resolution')
self.length = length
self.offset = offset
self.box = []
self.box = box
def __repr__(self):
msg = "glymur.jp2box.ResolutionBox(box={0})"
msg = msg.format(self.box)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
@ -1676,6 +1698,11 @@ class CaptureResolutionBox(Jp2kBox):
self.length = length
self.offset = offset
def __repr__(self):
msg = "glymur.jp2box.CaptureResolutionBox({0}, {1})"
msg = msg.format(self.vertical_resolution, self.horizontal_resolution)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
msg += '\n VCR: {0}'.format(self.vertical_resolution)
@ -1733,6 +1760,11 @@ class DisplayResolutionBox(Jp2kBox):
self.length = length
self.offset = offset
def __repr__(self):
msg = "glymur.jp2box.DisplayResolutionBox({0}, {1})"
msg = msg.format(self.vertical_resolution, self.horizontal_resolution)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
msg += '\n VDR: {0}'.format(self.vertical_resolution)

View file

@ -40,7 +40,7 @@ from glymur.jp2box import JPEG2000SignatureBox
from glymur.core import COLOR, OPACITY
from glymur.core import RED, GREEN, BLUE, GREY, WHOLE_IMAGE
from .fixtures import OPENJP2_IS_V2_OFFICIAL
from .fixtures import OPENJP2_IS_V2_OFFICIAL, opj_data_file
try:
FORMAT_CORPUS_DATA_ROOT = os.environ['FORMAT_CORPUS_DATA_ROOT']
@ -779,6 +779,47 @@ class TestRepr(unittest.TestCase):
self.assertFalse(newbox.colorspace_unknown)
self.assertFalse(newbox.ip_provided)
def test_codestreamheader_box(self):
"""Verify __repr__ method on jpch box."""
jpch = glymur.jp2box.CodestreamHeaderBox()
newbox = eval(repr(jpch))
self.assertEqual(newbox.box_id, 'jpch')
self.assertEqual(len(newbox.box), 0)
def test_compositinglayerheader_box(self):
"""Verify __repr__ method on jplh box."""
jplh = glymur.jp2box.CompositingLayerHeaderBox()
newbox = eval(repr(jplh))
self.assertEqual(newbox.box_id, 'jplh')
self.assertEqual(len(newbox.box), 0)
def test_componentmapping_box(self):
"""Verify __repr__ method on cmap box."""
cmap = glymur.jp2box.ComponentMappingBox(component_index=(0, 0, 0),
mapping_type=(1, 1, 1),
palette_index=(0, 1, 2))
newbox = eval(repr(cmap))
self.assertEqual(newbox.box_id, 'cmap')
self.assertEqual(newbox.component_index, (0, 0, 0))
self.assertEqual(newbox.mapping_type, (1, 1, 1))
self.assertEqual(newbox.palette_index, (0, 1, 2))
def test_resolution_boxes(self):
"""Verify __repr__ method on resolution boxes."""
resc = glymur.jp2box.CaptureResolutionBox(0.5, 2.5)
resd = glymur.jp2box.DisplayResolutionBox(2.5, 0.5)
res_super_box = glymur.jp2box.ResolutionBox(box=[resc, resd])
newbox = eval(repr(res_super_box))
self.assertEqual(newbox.box_id, 'res ')
self.assertEqual(newbox.box[0].box_id, 'resc')
self.assertEqual(newbox.box[0].vertical_resolution, 0.5)
self.assertEqual(newbox.box[0].horizontal_resolution, 2.5)
self.assertEqual(newbox.box[1].box_id, 'resd')
self.assertEqual(newbox.box[1].vertical_resolution, 2.5)
self.assertEqual(newbox.box[1].horizontal_resolution, 0.5)
class TestJpxBoxes(unittest.TestCase):
"""Tests for JPX boxes."""