[Python-modules-commits] r32753 - in packages/jpylyzer/trunk (12 files)
malat at users.alioth.debian.org
malat at users.alioth.debian.org
Thu May 21 13:26:08 UTC 2015
Date: Thursday, May 21, 2015 @ 13:26:07
Author: malat
Revision: 32753
prepare package
Added:
packages/jpylyzer/trunk/debian/patches/
packages/jpylyzer/trunk/debian/patches/readme.patch
packages/jpylyzer/trunk/debian/patches/series
Modified:
packages/jpylyzer/trunk/debian/ (properties)
packages/jpylyzer/trunk/debian/changelog
packages/jpylyzer/trunk/debian/control
packages/jpylyzer/trunk/debian/copyright
packages/jpylyzer/trunk/debian/jpylyzer.pod
packages/jpylyzer/trunk/debian/python-jpylyzer-doc.docs
packages/jpylyzer/trunk/debian/rules
packages/jpylyzer/trunk/debian/watch
Deleted:
packages/jpylyzer/trunk/debian/jpylyzerUserManual.txt
Property changes on: packages/jpylyzer/trunk/debian
___________________________________________________________________
Added: mergeWithUpstream
+ 1
Modified: packages/jpylyzer/trunk/debian/changelog
===================================================================
--- packages/jpylyzer/trunk/debian/changelog 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/changelog 2015-05-21 13:26:07 UTC (rev 32753)
@@ -1,3 +1,12 @@
+jpylyzer (1.14.2-1) unstable; urgency=medium
+
+ * New upstream release
+ * Update new code location. Closes: #770432
+ * Bump Std-Vers to 3.9.6, no changes needed
+ * Need to build PDF file from scratch
+
+ -- Mathieu Malaterre <malat at debian.org> Thu, 21 May 2015 11:55:07 +0200
+
jpylyzer (1.13.0-1) unstable; urgency=low
* New upstream release
Modified: packages/jpylyzer/trunk/debian/control
===================================================================
--- packages/jpylyzer/trunk/debian/control 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/control 2015-05-21 13:26:07 UTC (rev 32753)
@@ -3,11 +3,10 @@
Priority: optional
Maintainer: Debian Python Modules Team <python-modules-team at lists.alioth.debian.org>
Uploaders: Mathieu Malaterre <malat at debian.org>
-Build-Depends: debhelper (>= 9)
-Build-Depends-Indep: python (>= 2.6.6-3~)
-Standards-Version: 3.9.5
+Build-Depends: debhelper (>= 9), python (>= 2.6.6-3~), texlive-xetex, pandoc, lmodern, texlive-fonts-recommended
+Standards-Version: 3.9.6
X-Python-Version: >= 2.7
-Homepage: https://github.com/openplanets/jpylyzer
+Homepage: https://github.com/openpreserve/jpylyzer
Vcs-Svn: svn://anonscm.debian.org/python-modules/packages/jpylyzer/trunk/
Vcs-Browser: http://anonscm.debian.org/viewvc/python-modules/packages/jpylyzer/trunk/
Modified: packages/jpylyzer/trunk/debian/copyright
===================================================================
--- packages/jpylyzer/trunk/debian/copyright 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/copyright 2015-05-21 13:26:07 UTC (rev 32753)
@@ -1,6 +1,6 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: jpylyzer
-Source: https://github.com/openplanets/jpylyzer
+Source: https://github.com/openpreserve/jpylyzer
Files: *
Copyright: 2011, 2012 Johan van der Knijff, Koninklijke Bibliotheek -
Modified: packages/jpylyzer/trunk/debian/jpylyzer.pod
===================================================================
--- packages/jpylyzer/trunk/debian/jpylyzer.pod 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/jpylyzer.pod 2015-05-21 13:26:07 UTC (rev 32753)
@@ -9,7 +9,7 @@
=head1 DESCRIPTION
JP2 (JPEG 2000 Part 1) image validator and properties extractor
- (C) National Library of the Netherlands / Open Planets Foundation
+ (C) National Library of the Netherlands / Open Preservation Foundation
=head1 OPTIONS
@@ -27,6 +27,10 @@
Report test results in verbose format.
+=item B<--recurse, -r>
+
+When analysing a directory, recurse into subdirectories (implies --wrapper).
+
=item B<--wrapper, -w>
Wrap output for individual image(s) in 'results' XML element.
@@ -54,7 +58,7 @@
=head1 BUGS
-Please report bugs at https://github.com/openplanets/jpylyzer/issues.
+Please report bugs at https://github.com/openpreserve/jpylyzer/issues.
=head1 AUTHORS
Deleted: packages/jpylyzer/trunk/debian/jpylyzerUserManual.txt
===================================================================
--- packages/jpylyzer/trunk/debian/jpylyzerUserManual.txt 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/jpylyzerUserManual.txt 2015-05-21 13:26:07 UTC (rev 32753)
@@ -1,3245 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- jpylyzer: validator and properties extractor for JPEG 2000 Part 1
- (JP2)
-
- User Manual
-
-
- jpylyzer version: 1.13
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Johan van der Knijff
- KB/ National Library of the Netherlands
- Open Planets Foundation
-
-
-
-
-
-
-
-
- This work was partially supported by the SCAPE Project. The SCAPE
- project is co-funded by the European Union under FP7 ICT-2009.4.1
- (Grant Agreement number 270137).
-
-
-
- Disclaimer
-
- Both the program code and this manual have been carefully inspected
- before printing. However, no warranties, either expressed or
- implied, are made concerning the accuracy, completeness,
- reliability, usability, performance, or fitness for any particular
- purpose of the information contained in this manual, to the
- software described in this manual, and to other material supplied
- in connection therewith. The material is provided "as is". The
- entire risk as to its quality and performance is with the user.
-
-
-
-
-
- Table of Contents
-
-
-
-
- 1 Introduction 1
-
- 1.1 About jpylyzer 1
-
- 1.2 Validation: scope and restrictions 1
-
- âValidâ means âprobably validâ 1
-
- No check on compressed bitstreams 1
-
- Recommendations for use in quality assurance workflows 2
-
- Note on ICC profile support 2
-
- 1.3 Outline of this User Manual 2
-
- 1.4 Funding 2
-
- 1.5 License 2
-
- 2 Installation and set-up 3
-
- 2.1 Obtaining the software 3
-
- 2.2 Installation of Python script (Linux/Unix, Windows, Mac OS
- X) 3
-
- Testing the installation 3
-
- Troubleshooting 4
-
- 2.3 Installation of Windows binaries (Windows only) 4
-
- Testing the installation 4
-
- Running jpylyzer without typing the full path 5
-
- 2.4 Installation of Debian packages (Ubuntu/Linux) 5
-
- 3 Using jpylyzer 7
-
- 3.1 Overview 7
-
- 3.2 Command-line usage 7
-
- Synopsis 7
-
- Output redirection 8
-
- Creating well-formed XML with multiple images 8
-
- ânullxmlâ option 8
-
- User warnings 8
-
- 3.3 Using jpylyzer as a Python module 9
-
- 4 Structure of a JP2 file 11
-
- 4.1 Scope of this chapter 11
-
- 4.2 General format structure 11
-
- 4.3 General structure of a box 12
-
- 4.4 Defined boxes in JP2 12
-
- 5 Output format 15
-
- 5.1 Overview 15
-
- 5.2 toolInfo element 16
-
- 5.3 fileInfo element 16
-
- 5.4 isValidJP2 element 16
-
- 5.5 tests element 16
-
- Default and verbose reporting of test results 17
-
- 5.6 properties element 17
-
- 6 JP2: box by box 19
-
- 6.1 About the properties and tests trees 19
-
- Naming of properties 19
-
- 6.2 JPEG 2000 Signature box 19
-
- Element name 19
-
- Reported properties 19
-
- Tests 20
-
- 6.3 File Type box 20
-
- Element name 20
-
- Reported properties 20
-
- Tests 20
-
- 6.4 JP2 Header box (superbox) 20
-
- Element name 20
-
- Reported properties 20
-
- Tests 21
-
- 6.5 Image Header box (child of JP2 Header box) 21
-
- Element name 21
-
- Reported properties 22
-
- Tests 22
-
- 6.6 Bits Per Component box (child of JP2 Header box) 22
-
- Element name 22
-
- Reported properties 22
-
- Tests 23
-
- 6.7 Colour Specification box (child of JP2 Header box) 23
-
- Element name 23
-
- Reported properties 23
-
- Reported properties of ICC profiles 23
-
- Tests 25
-
- 6.8 Palette box (child of JP2 Header box) 25
-
- Element name 25
-
- Reported properties 25
-
- Tests 26
-
- 6.9 Component Mapping box (child of JP2 Header box) 26
-
- Element name 26
-
- Reported properties 26
-
- Tests 26
-
- 6.10 Channel Definition box (child of JP2 Header box) 26
-
- Element name 26
-
- Reported properties 27
-
- Tests 27
-
- 6.11 Resolution box (child of JP2 Header box, superbox) 27
-
- Element name 27
-
- Reported properties 27
-
- Tests 27
-
- 6.12 Capture Resolution box (child of Resolution box) 28
-
- Element name 28
-
- Reported properties 28
-
- Tests 28
-
- 6.13 Default Display Resolution box (child of Resolution box)
- 29
-
- Element name 29
-
- Reported properties 29
-
- Tests 30
-
- 6.14 Contiguous Codestream box 30
-
- 6.15 Intellectual Property box 30
-
- 6.16 XML box 30
-
- Element name 30
-
- Reported properties 30
-
- Tests 30
-
- 6.17 UUID box 31
-
- Element name 31
-
- Reported properties 31
-
- Tests 31
-
- 6.18 UUID Info box (superbox) 32
-
- Element name 32
-
- Reported properties 32
-
- Tests 32
-
- 6.19 UUID List box (child of UUID Info box) 32
-
- Element name 32
-
- Reported properties 32
-
- Tests 32
-
- 6.20 Data Entry URL box (child of UUID Info box) 32
-
- Element name 33
-
- Reported properties 33
-
- Tests 33
-
- 6.21 Unknown box 33
-
- Element name 33
-
- Reported properties 33
-
- 6.22 Top-level tests and properties 33
-
- Element name 33
-
- Reported properties 34
-
- Tests 35
-
- 7 Contiguous Codestream box 37
-
- 7.1 General codestream structure 37
-
- Markers and marker segments 37
-
- General structure of the codestream 37
-
- 7.2 Limitations of codestream validation 38
-
- Main codestream header 38
-
- Tile parts 39
-
- Bit streams 40
-
- Detection of incomplete or truncated codestreams 40
-
- Current limitations of comment extraction 40
-
- 7.3 Structure of reported output 40
-
- 7.4 Contiguous Codestream box 41
-
- Element name 41
-
- Reported properties 41
-
- Tests 42
-
- 7.5 Image and tile size (SIZ) marker segment (child of
- Contiguous Codestream box) 43
-
- Element name 43
-
- Reported properties 43
-
- Tests 44
-
- 7.6 Coding style default (COD) marker segment 45
-
- Element name 45
-
- Reported properties 45
-
- Tests 46
-
- 7.7 Quantization default (QCD) marker segment 47
-
- Element name 47
-
- Reported properties 47
-
- Tests 47
-
- 7.8 Comment (COM) marker segment 48
-
- Element name 48
-
- Reported properties 48
-
- Tests 48
-
- 7.9 Tile part (child of Contiguous Codestream box) 49
-
- Element name 49
-
- Reported properties 49
-
- Tests 49
-
- 7.10 Start of tile part (SOT) marker segment (child of tile
- part) 49
-
- Element name 49
-
- Reported properties 50
-
- Tests 50
-
- 7.11 Coding style component (COC) marker segment 50
-
- Element name 50
-
- Reported properties 50
-
- Tests 50
-
- 7.12 Region-of-interest (RGN) marker segment 51
-
- Element name 51
-
- Reported properties 51
-
- Tests 51
-
- 7.13 Quantization component (QCC) marker segment 51
-
- Element name 51
-
- Reported properties 51
-
- Tests 51
-
- 7.14 Progression order change (POC) marker segment 51
-
- Element name 51
-
- Reported properties 52
-
- Tests 52
-
- 7.15 Packet length, main header (PLM) marker segment 52
-
- Element name 52
-
- Reported properties 52
-
- Tests 52
-
- 7.16 Packed packet headers, main header (PPM) marker segment 52
-
- Element name 52
-
- Reported properties 52
-
- Tests 53
-
- 7.17 Tile-part lengths (TLM) marker segment 53
-
- Element name 53
-
- Reported properties 53
-
- Tests 53
-
- 7.18 Component registration (CRG) marker segment 53
-
- Element name 53
-
- Reported properties 53
-
- Tests 53
-
- 7.19 Packet length, tile-part header (PLT) marker segment 54
-
- Element name 54
-
- Reported properties 54
-
- Tests 54
-
- 7.20 Packed packet headers, tile-part header (PPT) marker
- segment 54
-
- Element name 54
-
- Reported properties 54
-
- Tests 54
-
- 8 References 55
-
-
-
-
-
-Introduction
-
-
-
-
- 1 About jpylyzer
-
- This User Manual documents jpylyzer, a validator and feature
- extractor for JP2 images. JP2 is the still image format that is
- defined by JPEG 2000 Part 1 (ISO/IEC 15444-1). Jpylyzer was
- specifically created to answer the following questions that you
- might have about any JP2 file:
-
- 1. Is this really a JP2 and does it really conform to the format's
- specifications (validation)?
-
- 2. What are the technical characteristics of this image (feature
- extraction)?
-
-
-2 Validation: scope and restrictions
-
- Since the word âvalidationâ means different things to different
- people, a few words about the overall scope of jpylyzer. First of
- all, it is important to stress that jpylyzer is not a âone stop
- solutionâ that will tell you that an image is 100% perfect. What
- jpylyzer does is this: based on the JP2 format specification
- (ISO/IEC 15444-1), it parses a file. It then subjects the fileâs
- contents to a large number of tests, each of which is based on the
- requirements and restrictions that are defined by the standard. If
- a file fails one or more tests, this implies that it does not
- conform to the standard, and is no valid JP2. Importantly, this
- presumes that jpylyzerâs tests accurately reflect the format
- specification, without producing false positives.
-
-
-âValidâ means âprobably validâ
-
- If a file passes all tests, this is an indication that it is
- probably valid JP2. This (intentionally) implies a certain degree
- of remaining uncertainty, which is related to the following.
-
- First of all, jpylyzer (or any other format validator for that
- matter) âvalidatesâ a file by trying to prove that it does not
- conform to the standard. It cannot prove that that a file does
- conform to the standard.
-
- Related to this, even though jpylyzerâs validation process is very
- comprehensive, it is not complete. For instance, the validation of
- JPEG 2000 codestreams at this moment is still somewhat limited.
- Section 7.2 discusses these limitations in detail. Some of these
- limitations (e.g. optional codestream segment markers that are only
- minimally supported at this stage) may be taken away in upcoming
- versions of the tool.
-
-
-No check on compressed bitstreams
-
- One important limitation that most certainly will not be addressed
- in any upcoming versions is that jpylyzer does not analyse the data
- in the compressed bitstream segments. Doing so would involve
- decoding the whole image, and this is completely out of jpylyzerâs
- scope. As a result, it is possible that a JP2 that passes each of
- jpylyzerâs tests will nevertheless fail to render correctly in a
- viewer application.
-
-
-Recommendations for use in quality assurance workflows
-
- Because of the foregoing, a thorough JP2 quality assurance workflow
- should not rely on jpylyzer (or any other format validator) alone,
- but it should include other tests as well. Some obvious examples
- are:
-
- ⢠A rendering test that checks if a file renders at all
-
- ⢠Format migration workflows (e.g. TIFF to JP2) should ideally also
- include some comparison between source and destination images (e.g.
- a pixel-wise comparison)
-
- Conversely, an image that successfully passes a rendering test or
- pixel-wise comparison may still contain problematic features (e.g.
- incorrect colour space information), so validation, rendering tests
- and pixel-wise comparisons are really complementary to each other.
-
-
-Note on ICC profile support
-
- At the time of writing an amendment is in preparation that will
- extend the support for embedded ICC profiles in JP2. Jpylyzer is
- already anticipating these changes, and as a result there is a
- minor discrepancy here between jpylyzer and the current standard
- text.
-
-
-3 Outline of this User Manual
-
- Chapter 2 describes the installation process of jpylyzer for
- Windows and Unix-based systems. Chapter 3 explains the usage of
- jpylyzer as a command-line tool, or as an importable Python module.
- Chapter 4 gives a brief overview of the structure of JP2 and its
- âboxâ structure. Jpylyzerâs output format is explained in chapter
- 5. The final chapters give a detailed description of the tests that
- jpylyzer performs for validation, and its reported properties.
- Chapter 6 does this for all âboxesâ, except for the âContiguous
- Codestreamâ box, which is given a chapter (7) of its own.
-
-
-4 Funding
-
- The development of jpylyzer was funded by the EU FP 7 project SCAPE
- (SCAlabable Preservation Environments). More information about this
- project can be found here:
-
- http://www.scape-project.eu/
-
-
-5 License
-
- Jpylyzer is free software: you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version. This program is
- distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
- Public License for more details. You should have received a copy of
- the GNU Lesser General Public License along with this program. If
- not, see <http://www.gnu.org/licenses/>.
-
- On Debian systems, the complete text of the GNU Lesser General
- Public License version 3 can be found in "/usr/share/common-
- licenses/LGPL-3".
-
-
-
-
-
-
-
- Installation and set-up
-
-
-1 Obtaining the software
-
- To obtain the latest version of the software please use the
- download links at the jpylyzer homepage:
-
- http://openplanets.github.io/jpylyzer/
-
- You have three options:
-
- 1. Use the Python source code. This allows you to run the software as
- a Python script on most popular platforms (Windows, Linux, Mac,
- etc.). However, this requires that you have a recent version of the
- Python interpreter available on your system.
-
- 2. Alternatively, for Windows users there is also a set of stand-alone
- binaries[1]. These allow you to run jpylyzer as an executable
- Windows application, without any need for installing Python. This
- option is particularly useful for Windows users who cannot (or
- donât want to) install software on their system.
-
- 3. For Linux users Debian packages are available. These allow you to
- run jpylyzer without any need for installing Python.
-
- These options are described in the following sections.
-
-
-2 Installation of Python script (Linux/Unix, Windows, Mac OS X)
-
- First, download the source files using one of the âSource Code
- Downloadsâ links on the OPF jpylyzer page.
-
- Then unzip the contents of the ZIP file to an empty directory. If
- you are working on a Linux/Unix based system you may need to make
- the scripts executable, and convert any line breaks to Unix-style
- ones. To do this, use the following commands:
-
- chmod 755 *.py
-
- dos2unix *.py
-
- In order to run the script you will need either Python 2.7, or
- Python 3.2 (or more recent)[2]. Python can be downloaded from:
-
- http://python.org/
-
-
-Testing the installation
-
- To test your installation, open a console window (or command
- prompt) and type:
-
- %jpylyzerPath%/jpylyzer.py -h
-
- In the above command, replace %jpylyzerPath% with the full path to
- the jpylyzer installation directory (i.e. the directory that
- contains âjpylyzer.pyâ and its associated files). For example, if
- you extracted the files to directory â/home/jpylyzerâ, the command
- would become:
-
- /home/jpylyzer/jpylyzer.py -h
-
- Executing this command should result in the following screen
- output:
-
- usage: jpylyzer.py [-h] [--verbose] [--wrapper] [--version] ...
-
-
-
-
- JP2 image validator and properties extractor
-
-
-
-
- positional arguments:
-
- jp2In input JP2 image(s) or folder(s), prefix wildcard
-
- (*) with backslash (\) in Linux
-
-
-
-
- optional arguments:
-
- -h, --help show this help message and exit
-
- --verbose report test results in verbose format
-
- --wrapper, -w wraps the output for individual image(s)
-
- in'results' XML element
-
- --nullxml extract null-terminated XML content from XML and
-
- UUID boxes (doesn't affect validation)
-
-
-
- --version show program's version number and exit
-
-
-Troubleshooting
-
- If the above test didnât run successfully, first verify the
- following possible causes:
-
- ⢠On Windows: check if files with a .py extension are associated with
- the Python interpreter. If you have multiple versions of Python on
- your system, make sure that the association does not link to a
- Python version that is incompatible with jpylyzer (e.g. Python 2.6
- or older, or Python 3.0/3.1).
-
- ⢠On Unix/Linux: by default, jpylyzer uses the command interpreter
- that is defined by the âpythonâ environment variable. If this is
- linked to some (very) old version of Python, things may not work as
- expected. If you run into problems because of this, update the
- command interpreter references in jpylyzer.py, i.e. change:
-
- #! /usr/bin/env python
-
- into:
-
- #! /usr/bin/env python27
-
-
-3 Installation of Windows binaries (Windows only)
-
- Download the binary using the link on the jpylyzer homepage. Unzip
- the contents of this file to an empty folder on your PC. Jpylyzer
- should now be ready for use.
-
-
-Testing the installation
-
- To test your installation, open a Command Prompt (âDOS promptâ) and
- type:
-
- %jpylyzerPath%\jpylyzer -h
-
- In the above command, replace %jpylyzerPath% with the full path to
- the jpylyzer installation directory (i.e. the directory that
- contains âjpylyzer.exeâ and its associated files). For example, if
- you extracted the files to directory âc:\tools\jpylyzerâ, the
- command would become:
-
- c:\tools\jpylyzer\jpylyzer -h
-
- Executing this command should result in the following screen
- output:
-
- usage: jpylyzer.py [-h] [--verbose] [--wrapper] [--version] ...
-
-
-
-
- JP2 image validator and properties extractor
-
-
-
-
- positional arguments:
-
- jp2In input JP2 image(s) or folder(s), prefix wildcard
-
- (*) with backslash (\) in Linux
-
-
-
-
- optional arguments:
-
- -h, --help show this help message and exit
-
- --verbose report test results in verbose format
-
- --wrapper, -w wraps the output for individual image(s) in
-
- 'results' XML element
-
- --nullxml extract null-terminated XML content from XML and
-
- UUID boxes (doesn't affect validation)
-
-
-
- --version show program's version number and exit
-
-
-Running jpylyzer without typing the full path
-
- Optionally, you may also want to add the full path of the jpylyzer
- installation directory to the Windows âPathâ environment variable.
- Doing so allows you to run jpylyzer from any directory on your PC
- without having to type the full path. In Windows XP you can do this
- by selecting âsettingsâ from the âStartâ menu; then go to âcontrol
- panelâ/âsystemâ and go to the âadvancedâ tab. Click on the
- âenvironment variablesâ button. Finally, locate the âPathâ variable
- in the âsystem variablesâ window, click on âEditâ and add the full
- jpylyzer path (this requires local Administrator privileges). The
- settings take effect on any newly opened command prompt.
-
-
-4 Installation of Debian packages (Ubuntu/Linux)
-
- For a number of Linux architectures Debian packages of jpylyzer
- exist. To install, simply download the .deb file, double-click on
- it and select Install Package. Alternatively you can also do this
- in the command terminal by typing:
-
- sudo dpkg -i jpylyzer_1.9.0_i386.deb
-
- In both cases you need to have administrative privileges.
-
-
-
-
- Using jpylyzer
-
-
-1 Overview
-
- This chapter describes the general use of jpylyzer. The first
- sections cover the use of jpylyzer as a command-line tool and as an
- importable Python module.
-
-
-2 Command-line usage
-
- This section explains jpylyzerâs general command-line interface.
- For the sake of brevity, all command-line examples assume the use
- of the Python script; moreover, full paths are omitted. This means
- that, depending on your system and settings, you may have to
- substitute each occurrence of âjpylyzer.pyâ with its full path, the
- corresponding Windows binary, or a combination of both. The
- following examples illustrate this:
-
-|This User Manual |jpylyzer.py |
-|Substitution example Linux |/home/jpylyzer/jpylyzer.py |
-|Substitution example Windows |c:\tools\jpylyzer\jpylyzer |
-|binaries | |
-
-
- Furthermore, command line arguments that are given between square
- brackets (example: [-h]) are optional.
-
-
-Synopsis
-
- Jpylyzer can be invoked using the following command-line arguments:
-
- jpylyzer.py [-h] [--verbose] [--wrapper] [--version]
-
- [--nullxml] [--nopretty] ...
-
- With:
-
-|⦠|: input JP2 image(s) |
-|[-h, --help] |: show help message and exit |
-|[--verbose] |: report test results in verbose |
-| |format |
-|[--wrapper, -w] |: wraps the output for individual |
-| |image(s) in 'results' XML element |
-|[--nullxml] |: extract null-terminated XML |
-| |content from XML and UUID |
-| |boxes(doesn't affect validation) |
-|[--nopretty] |: suppress pretty-printing of XML |
-| |output |
-|[-v, --version] |: show program's version number |
-| |and exit |
-
-
-
- Note that the input can either be a single image, a space-separated
- sequence of images, a pathname expression that includes multiple
- images, or any combination of the above. For example, the following
- command will process one single image:
-
- jpylyzer.py rubbish.jp2
-
- The next example shows how to process all files with a âjp2â
- extension in the current directory:
-
- jpylyzer.py *.jp2
-
- Note that on Unix/Linux based systems pathname expressions may not
- work properly unless you wrap them in quotation marks:
-
- jpylyzer.py â*.jp2â
-
-
-Output redirection
-
- All output (except warning and system error messages) is directed
- to the standard output device (stdout). By default this is the
- console screen. Use your platformâs standard output redirection
- operators to redirect output to a file. The most common situation
- will be to redirect the output of one invocation of jpylyzer to an
- XML file, which can be done with the â>â operator (both under
- Windows and Linux):
-
- jpylyzer.py jp2In > outputFile
-
- E.g. the following command will run jpylyzer on image ârubbish.jp2â
- and redirects the output to file ârubbish.xmlâ:
-
- jpylyzer.py rubbish.jp2 > rubbish.xml
-
- The format of the XML output is described in Chapter 5.
-
-
-Creating well-formed XML with multiple images
-
- By default, jpylyzer creates a separate XML tree for each analysed
- image, without any overarching hierarchy. If you use a pathname
- expression to process multiple images and redirect the output to a
- file, the resulting file will not be a well-formed XML document. An
- example:
-
- jpylyzer.py rubbish.jp2 garbage.jp2 > rubbish.xml
-
- In this case, the output for these 2 images is redirected to
- ârubbish.xmlâ, but the file will be a succession of two XML trees,
- which by itself is not well-formed XML. Use the --wrapper option
- if you want to create well-formed XML instead:
-
- jpylyzer.py --wrapper rubbish.jp2 garbage.jp2 > rubbish.xml
-
- In the above case the XML trees of the individual images are
- wrapped inside a âresultsâ element.
-
-
-ânullxmlâ option
-
- The nullxml option was added to enable extraction of XML content
- that is terminated by a null-byte. By default jpylyzer doesnât
- report the XML in that case, because it throws an exception in the
- XML parser. Apparently some old versions of the Kakadu demo
- applications would erroneously add a null-byte to embedded XML, so
- this option can be used to force extraction for images that are
- affected by this.
-
-
-User warnings
-
- Under the following conditions jpylyzer will print a user warning
- to the standard error device (typically the console screen):
-
- 1. If there are no input images to check (typically because the value
- of jp2In refers to a non-existent file), the following warning
- message is shown:
-
- User warning: no images to check!
-
- 2. In some cases you will see the following warning message:
-
- User warning: ignoring 'boxName' (validator function not yet
- implemented)
-
- The reason for this: a JP2 file is made up of units that are
- called âboxesâ. This is explained in more detail in Chapter
- 4. Each âboxâ has its own dedicated validator function. At
- this stage validator functions are still missing for a small
- number of (optional) boxes. Jpylyzer will display the above
- warning message if it encounters a (yet) unsupported box. Any
- unsupported boxes are simply ignored, and the remainder of
- the file will be analyzed (and validated) normally.
-
- 3. Finally, you may occasionally see this warning message:
-
- User warning: ignoring unknown box
-
- This happens if jpylyzer encounters a box that is not defined
- by JPEG 2000 Part 1. It should be noted that, to a large
- extent, JPEG 2000 Part 1 permits the presence of boxes that
- are defined outside the standard. Again, jpylyzer will simply
- ignore these and process all other boxes normally.
-
-
-3 Using jpylyzer as a Python module
-
- Instead of using jpylyzer from the command-line, you can also
- import it as a module in your own Python programs. To do so, put
- all the jpylyzer source files in the same directory as your own
- code. Then import jpylyzer into your code by adding:
-
- import jpylyzer
-
- Subsequently you can call any function that is defined in
- jpylyzer.py. In practice you will most likely only need the
- checkOneFile function, which can be called in the following way:
-
- jpylyzer.checkOneFile(file)
-
- Here, file is the path to a file object. The function returns an
- element object that can either be used directly, or converted to
- XML using the ElementTree module[3]. The structure of the element
- object follows the XML output that described in Chapter 5.
-
- Alternatively, you may only want to import the checkOneFile
- function, in which case the import statement becomes:
-
- from jpylyzer import checkOneFile
-
- This will allow you to call the function as follows:
-
- checkOneFile(file)
-
-
-
-
-
-
-
-
-
-
-
- Structure of a JP2 file
-
-
-1 Scope of this chapter
-
- This chapter gives a brief overview of the JP2 file format. A basic
- understanding of the general structure of JP2 is helpful for
- appreciating how jpylyzer performs its validation. It will also
- make it easier to understand jpylyzerâs extracted properties, as
- these are reported as a hierarchical tree that corresponds to the
- internal structure of JP2.
-
- For an exhaustive description of every detail of the format you are
- advised to consult Annex I (âJP2 file format syntaxâ) and Annex A
- (âCodestream syntaxâ) of ISO/IEC 15444-1.
-
-
-2 General format structure
-
- At the highest level, a JP2 file is made up of a collection of
- boxes. A box can be thought of as the fundamental building block of
- the format. Some boxes (âsuperboxesâ) are containers for other
- boxes. Figure 4-1 gives an overview of the top-level boxes in a JP2
- file.
-
- [pic]
-
- Figure 4-1 Top-level overview of a JP2 file (based on Figure I.1
- in ISO/IEC 15444-1). Boxes with dashed borders are optional.
- 'Superbox' denotes a box that contains other box(es).
-
-
-
-
- A number of things here are noteworthy to point out:
-
- ⢠Some of these boxes are required, whereas others (indicated with
- dashed lines in Figure 4-1) are optional.
-
- ⢠The order in which the boxes appear in the file is subject to some
- constraints (e.g. the first box in a JP2 must always be a
- âSignatureâ box, followed by a âFile Typeâ box).
-
- ⢠Some boxes may have multiple instances (e.g. âContiguous
- Codestreamâ box), whereas others must be unique (e.g. âJP2 Headerâ
- box).
-
- More specific details can be found in the standard. The important
- thing here is that requirements like the above are something that
- should be verified by a validator, and this is exactly what
- jpylyzer does at the highest level of its validation procedure.
-
-
-3 General structure of a box
-
- All boxes are defined by a generic binary structure, which is
- illustrated by Figure 4-2. Most boxes are made up of the following
- three components:
-
- 1. A fixed-length âbox lengthâ field that indicates the total size of
- the box (in bytes).
-
- 2. A fixed-length âbox typeâ field which specifies the type of
- information that can be found in this box
-
- 3. The box contents, which contains the actual information within the
- box. Its internal format depends on the box type. The box contents
- of a âsuperboxâ will contain its child boxes (which can be parsed
- recursively).
-
- In some cases a box will also contain an âextended box length
- fieldâ. This field is needed if the size of a box exceeds 232-1
- bytes, which is the maximum value that can be stored in the 4-byte
- âbox lengthâ field.
-
- [pic]
-
- Figure 4-2 General structure of a box (based on Figure I.4 in
- ISO/IEC 15444-1).
-
-
-4 Defined boxes in JP2
-
- Table 4-1 lists all boxes that are defined in ISO/IEC 15444-1. A
- JP2 file may contain boxes that are not defined by the standard.
- Such boxes are simply skipped and ignored by conforming reader
- applications.
-
-
-
-
-
- Table 4-1 Defined boxes in JP2 (taken from Table I.2 in ISO/IEC
- 15444-1, with minor modifications). Indentation in âbox nameâ
- column indicates hierarchical structure.
-
-|Box name |Superbox |Required? |Purpose |
-|JPEG 2000 Signature box|No |Required |Identifies the file as |
-| | | |being part of the JPEG |
-| | | |2000 family of files. |
-|File Type box |No |Required |Specifies file type, |
-| | | |version and |
-| | | |compatibility |
-| | | |information, including |
-| | | |specifying if this file |
-| | | |is a conforming JP2 file|
-| | | |or if it can be read by |
-| | | |a conforming JP2 reader.|
-|JP2 Header box |Yes |Required |Contains a series of |
-| | | |boxes that contain |
-| | | |header-type information |
-| | | |about the file. |
-| - Image Header box |No |Required |Specifies the size of |
-| | | |the image and other |
-| | | |related fields. |
-| - Bits Per Component |No |Optional |Specifies the bit depth |
-|box | | |of the components in the|
-| | | |file in cases where the |
-| | | |bit depth is not |
-| | | |constant across all |
-| | | |components. |
-| - Colour Specification|No |Required |Specifies the |
-|box | | |colourspace of the |
-| | | |image. |
-| - Palette box |No |Optional |Specifies the palette |
-| | | |which maps a single |
-| | | |component in index space|
-| | | |to a multiple-component |
-| | | |image. |
-| - Component Mapping |No |Optional |Specifies the mapping |
-|box | | |between a palette and |
-| | | |codestream components. |
-| - Channel Definition |No |Optional |Specifies the type and |
-|box | | |ordering of the |
-| | | |components within the |
-| | | |codestream, as well as |
-| | | |those created by the |
-| | | |application of a |
-| | | |palette. |
-| - Resolution box |Yes |Optional |Contains the grid |
-| | | |resolution. |
-| - Capture |No |Optional |Specifies the grid |
-|Resolution box | | |resolution at which the |
-| | | |image was captured. |
-| - Default Display |No |Optional |Specifies the default |
-|Resolution box | | |grid resolution at which|
-| | | |the image should be |
-| | | |displayed. |
-|Contiguous Codestream |No |Required |Contains the codestream.|
-|box | | | |
-|Intellectual Property |No |Optional |Contains intellectual |
-|box | | |property information |
-| | | |about the image. |
-|XML box |No |Optional |Provides a tool by which|
-| | | |vendors can add XML |
-| | | |formatted information to|
-| | | |a JP2 file. |
-|UUID box |No |Optional |Provides a tool by which|
-| | | |vendors can add |
-| | | |additional information |
-| | | |to a file without |
-| | | |risking conflict with |
-| | | |other vendors. |
-|UUID Info box |Yes |Optional |Provides a tool by which|
-| | | |a vendor may provide |
-| | | |access to additional |
-| | | |information associated |
-| | | |with a UUID. |
-| - UUID List box |No |Optional |Specifies a list of |
-| | | |UUIDs. |
-| - URL box |No |Optional |Specifies a URL. |
-
-
-
-
-
-
-
-
-
-
-
- Output format
-
- This chapter explains jpylyzerâs output format.
-
-
-1 Overview
-
- Jpylyzer generates its output in XML format. Figure 5-1 shows the
- output structure.
-
- [pic]
-
- Figure 5-1 Jpylyzerâs XML output structure. Note that âboxâ
- elements under âtestsâ and âpropertiesâ contain further sub-
- elements.
-
-
- The root element (jpylyzer) contains 5 child elements:
-
- 1. toolInfo: information about jpylyzer
-
- 2. fileInfo: general information about the analysed file
-
- 3. isValidJP2: outcome of the validation
-
- 4. tests: outcome of the individual tests that are part of the
- validation process (organised by box)
-
- 5. properties: image properties (organised by box)
-
- If jpylyzer is executed with the --wrapper option, the root element
- is results, which contains one or more jpylyzer elements which
- otherwise follow the above structure. From version 1.12 onward, the
- XML output is pretty-printed. You can use the --nopretty switch to
- disable pretty-printing (this produces smaller files and may give a
- slightly better performance).
-
-2 toolInfo element
-
- This element holds information about jpylyzer. Currently it
- contains the following sub-elements:
-
- ⢠toolName: name of the analysis tool (i.e. jpylyzer.py or jpylyzer,
- depending on whether the Python script or the Windows binaries were
- used)
-
- ⢠toolVersion: version of jpylyzer (jpylyzer uses a date versioning
- scheme)
-
-
-3 fileInfo element
-
- This element holds general information about the analysed file.
- Currently it contains the following sub-elements:
-
- ⢠filename: name of the analysed file without its path (e.g.
- ârubbish.jp2â)
-
- ⢠filePath: name of the analysed file, including its full absolute
- path (e.g. âd:\data\images\rubbish.jp2â)
-
- ⢠fileSizeInBytes: file size in bytes
-
- ⢠fileLastModified: last modified date and time
-
-
-4 isValidJP2 element
-
- This element contains the results of the validation. If a file
- passed all the tests (i.e. all tests returned âTrueâ, see section
- 5.5) it is most likely valid JP2, and the value of isValidJP2 will
- be âTrueâ. Its value is âFalseâ otherwise.
-
-
-5 tests element
-
- This element is reserved to hold the outcomes of all the individual
- tests that jpylyzer performs to assess whether a file is valid JP2.
- The results are organised in a hierarchical tree that corresponds
- to JP2âs box structure. Each individual test can have two values:
-
- ⢠âTrueâ if a file passed the test.
-
- ⢠âFalseâ if a file failed the test.
-
- If a file passed all tests, this is an indication that it is most
- likely valid JP2. In that case, the isValidJP2 element (section
- 5.4) has a value of âTrueâ (and âFalseâ in all other cases). These
- tests are all explained in chapters 6 and 7.
-
-
-Default and verbose reporting of test results
-
- By default, jpylyzer only reports any tests that failed (i.e.
- returned âFalseâ), including the corresponding part of the box
- structure. For a valid JP2 the tests element will be empty. If the
- --verbose flag is used, the results of all tests are included
- (including those that returned âTrueâ)[4].
-
-
-6 properties element
-
- This element contains the extracted image properties, which are
- organised in a hierarchical tree that corresponds to JP2âs box
- structure. See chapters 6 and 7 for a description of the reported
- properties.
-
-
-
-
- JP2: box by box
-
- The following two chapters provide a detailed explanation of
- jpylyzerâs functionality and its output. In particular, the
- following two aspects are addressed:
-
- 1. The reported properties
-
- 2. The tests that jpylyzer performs to establish the validity of a
- file.
-
-
-1 About the properties and tests trees
-
- The âpropertiesâ element in jpylyzerâs output holds a hierarchical
- tree structure that contains all extracted properties. The âtestsâ
- tree follows the same structure. The hierarchy reflects JP2âs box
- structure (explained in Chapter 4): each box is represented by a
- corresponding output element that contains the corresponding
- property entries. If a box is a superbox, the output element will
- contain child elements for each child box. For some boxes, the
- output contains further sub-elements. This applies in particular to
- the Contiguous Codestream box, since its contents are more complex
- than any of the other boxes. Also, if a Colour Specification box
- contains an embedded ICC profile, the properties of the ICC profile
- are stored in a separate sub-element. In addition to this, one
- âpropertyâ that is reported by jpylyzer (the compression ratio) is
- not actually extracted from any particular box. Instead, it is
- calculated from the file size and some properties from the Header
- boxes. As a result, it is reported separately in the root of the
- properties tree.
-
-
-Naming of properties
-
- The naming of the reported properties largely follows the standard
- (ISO/IEC 15444-1). Some minor differences follow from the fact that
- the standard does have any consistent use of text case, whereas
- jpylyzer uses lower camel case. In addition, some parameters in the
- standard are compound units that aggregate a number of Boolean
- âswitchesâ, where no names are provided for each individual switch.
- An example of this is the Scod (coding style) parameter in the
- codestream header, which contains three switches that define the
- use of precincts, start-of-packet markers and end-of-packet
- markers. For cases like these jpylyzer uses its own (largely self-
- descriptive) names (which are all documented in these chapters).
-
-
-2 JPEG 2000 Signature box
-
- This box contains information that allows identification of the
- file as being part of the JPEG 2000 family of file formats.
-
-
-Element name
-
- signatureBox
-
-
-Reported properties
-
- None (box only holds JPEG 2000 signature, which includes non-
- printable characters)
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box contents equals 4 bytes|
-|signatureIsValid |Signature equals 0x0d0a870a |
-
-
-3 File Type box
-
- This box specifies file type, version and compatibility
- information, including specifying if this file is a conforming JP2
- file or if it can be read by a conforming JP2 reader.
-
-
-Element name
-
- fileTypeBox
-
-
-Reported properties
-
-|Property |Description |
-|br |Brand |
-|minV |Minor version |
-|cL* |Compatibility field (repeatable) |
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |(Size of box â 8) /4 is a whole |
-| |number (integer) |
-|brandIsValid |br equals 0x6a703220 (âjp2 â) |
-|minorVersionIsValid |minV equals 0 |
-|compatibilityListIsValid |Sequence of compatibility (cL) |
-| |fields includes one entry that |
-| |equals 0x6a703220 (âjp2 â) |
-
-
-4 JP2 Header box (superbox)
-
- This box is a superbox that holds a series of boxes that contain
- header-type information about the file.
-
-
-Element name
-
- jp2HeaderBox
-
-
-Reported properties
-
- Since this is a superbox, it contains a number of child boxes.
- These are represented as child elements in the properties tree:
-
-
-
-
-
- |Child element |Description |
-|imageHeaderBox (section |Properties from Image Header box |
-|6.5) |(required) |
-|bitsPerComponentBox |Properties from Bits Per Component |
-|(section 6.6) |box (optional) |
-|ColourSpecificationBox |Properties from Colour |
-|(section 6.7) |Specification box (required) |
-|paletteBox (section 6.8) |Properties from Palette box |
-| |(optional) |
-|componentMappingBox |Properties from Component Mapping |
-|(section 6.9) |box (optional) |
-|channelDefinitionBox |Properties from Channel Definition |
-|(section 6.10) |box (optional) |
-|resolutionBox (section |Properties from Resolution box |
-|6.11) |(optional) |
-
-
-Tests
-
-|Test name |True if |
-|containsImageHeaderBox |Box contains required Image Header|
-| |box |
-|containsColourSpecification|Box contains required Colour |
-|Box |Specification box |
-|containsBitsPerComponentBox|Box contains Bits Per Component |
-| |Box, which is required if bPCSign |
-| |and bPCDepth in Image Header Box |
-| |equal 1 and 128, respectively |
-| |(test is skipped otherwise) |
-|firstJP2HeaderBoxIsImageHea|First child box is Image Header |
-|derBox |Box |
-|noMoreThanOneImageHeaderBox|Box contains no more than one |
-| |Image Header box |
-|noMoreThanOneBitsPerCompone|Box contains no more than one Bits|
-|ntBox |Per Component box |
-|noMoreThanOnePaletteBox |Box contains no more than one |
-| |Palette box |
-|noMoreThanOneComponentMappi|Box contains no more than one |
-|ngBox |Component Mapping box |
-|noMoreThanOneChannelDefinit|Box contains no more than one |
-|ionBox |Channel Definition box |
-|noMoreThanOneResolutionBox |Box contains no more than one |
-| |Resolution box |
-|colourSpecificationBoxesAre|In case of multiple Colour |
-|Contiguous |Specification boxes, they appear |
-| |contiguously in the JP2 Header box|
-|paletteAndComponentMappingB|Box contains a Palette box (only |
-|oxes |if Component Mapping box is |
-|OnlyTogether |present); box contains a Component|
-| |Mapping box (only if Palette box |
-| |is present) |
-
-
-
-
- 5 Image Header box (child of JP2 Header box)
-
- This box specifies the size of the image and other related fields.
-
-
-Element name
-
- imageHeaderBox
-
-
-Reported properties
-
-|Property |Description |
-|height |Image height in pixels |
-|width |Image width in pixels |
-|nC |Number of image components |
-|bPCSign |Indicates whether image components |
-| |are signed or unsigned |
-|bPCDepth |Number of bits per component |
-|c |Compression type |
-|unkC |Colourspace Unknown field (âyesâ if|
-| |colourspace of image data is |
-| |unknown; ânoâ otherwise) |
-|iPR |Intellectual Property field (âyesâ |
-| |if image contains intellectual |
-| |property rights information; ânoâ |
-| |otherwise) |
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box contents equals 14 |
-| |bytes |
-|heightIsValid |height is within range [1, 232 - 1]|
-|widthIsValid |width is within range [1, 232 - 1] |
-|nCIsValid |nC is within range [1, 16384] |
-|bPCIsValid |bPCDepth is within range [1,38] OR |
-| |bPCSign equals 255 (in the latter |
-| |case the bit depth is variable) |
-|cIsValid |c equals 7 (âjpeg2000â) |
-|unkCIsValid |unkC equals 0 (ânoâ) or 1 (âyesâ) |
-|iPRIsValid |iPR equals 0 (ânoâ) or 1 (âyesâ) |
-
-
-
-
- 6 Bits Per Component box (child of JP2 Header box)
-
- This (optional) box specifies the bit depth of the components in
- the file in cases where the bit depth is not constant across all
- components.
-
-
-Element name
-
- bitsPerComponentBox
-
-
-Reported properties
-
-|Property |Description |
-|bPCSign* |Indicates whether image component |
-| |is signed or unsigned (repeated for|
-| |each component) |
-|bPCDepth* |Number of bits for this component |
-| |(repeated for each component) |
-
-
-Tests
-
-|Test name |True if |
-|bPCIsValid* |bPCDepth is within range [1,38] |
-| |(repeated for each component) |
-
-
-
-
- 7 Colour Specification box (child of JP2 Header box)
-
- This box specifies the colourspace of the image.
-
-
-Element name
-
- colourSpecificationBox
-
-
-Reported properties
-
-|Property |Description |
-|meth |Specification method. Indicates |
-| |whether colourspace of this image |
-| |is defined as an enumerated |
-| |colourspace or using a (restricted)|
-| |ICC profile. |
-|prec |Precedence |
-|approx |Colourspace approximation |
-|enumCS (if meth equals |Enumerated colourspace (as |
-|âEnumeratedâ) |descriptive text string) |
-|icc (if meth equals |Properties of ICC profile as child |
-|âRestricted ICCâ or âAny |element (see below) |
-|ICCâ[5]) | |
-
-
-Reported properties of ICC profiles
-
- If the colour specification box contains an embedded ICC profile,
- jpylyzer will also report the following properties (which are all
- grouped in an âiccâ sub-element in the properties tree). An
- exhaustive explanation of these properties is given in the ICC
- specification (ISO 15076-1 / ICC.1:2004-10). Note that jpylyzer
- does not validate embedded ICC profiles (even though it does check
- if a specific ICC profile is allowed in JP2)!
-
-
-
-
-
- |Property |Description |
-|profileSize |Size of ICC profile in bytes |
-|preferredCMMType |Preferred CMM type |
-|profileVersion |Profile version. Format: |
-| |âmajorRevision.minorRevision.bugFix|
-| |Revisionâ |
-|profileClass |Profile/device class |
-|colourSpace |Colourspace |
-|profileConnectionSpace |Profile connection space |
-|dateTimeString |Date / time string. Format: |
-| |âYYYY/MM/DD, h:m:sâ |
-|profileSignature |Profile signature |
-|primaryPlatform |Primary platform |
-|embeddedProfile |Flag that indicates whether profile|
-| |is embedded in file (âyesâ/ânoâ) |
-|profileCannotBeUsedIndepen|Flag that indicates whether profile|
-|dently |cannot (!) be used independently |
-| |from the embedded colour data |
-| |(âyesâ/ânoâ) |
-|deviceManufacturer |Identifies a device manufacturer |
-|deviceModel |Identifies a device model |
-|transparency |Indicates whether device medium is |
-| |reflective or transparent |
-|glossiness |Indicates whether device medium is |
-| |glossy or matte |
-|polarity |Indicates whether device medium is |
-| |positive or negative |
-|colour |Indicates whether device medium is |
-| |colour or black and white |
-|renderingIntent |Rendering intent |
-|connectionSpaceIlluminantX|Profile connection space illuminant|
-| |X |
-|connectionSpaceIlluminantY|Profile connection space illuminant|
-| |Y |
-|connectionSpaceIlluminantZ|Profile connection space illuminant|
-| |Z |
-|profileCreator |Identifies creator of profile |
-|profileID |Profile checksum (as hexadecimal |
-| |string) |
-|tag* |Signature of profile tag (repeated |
-| |for each tag in the profile) |
-|description |Profile description (extracted from|
-| |âdescâ tag) |
-
-
-
-
-Tests
-
-|Test name |True if |
-|methIsValid |meth equals 1 (enumerated |
-| |colourspace) or 2 (restricted ICC |
-| |profile) |
-|precIsValid |prec equals 0 |
-|approxIsValid |approx equals 0 |
-|enumCSIsValid (if meth |enumCS equals 16 (âsRGBâ), 17 |
-|equals âEnumeratedâ) |(âgreyscaleâ) or 18 (âsYCCâ) |
-|iccSizeIsValid (if meth |Actual size of embedded ICC profile|
-|equals âRestricted ICCâ) |equals value of profileSize field |
-| |in ICC header |
-|iccPermittedProfileClass |ICC profile class is âinput |
-|(if meth equals |deviceâ or âdisplay deviceâ[6] |
-|âRestricted ICCâ) | |
-|iccNoLUTBasedProfile (if |ICC profile type is not N-component|
-|meth equals âRestricted |LUT based (which is not allowed in |
-|ICCâ) |JP2) |
-
-
-
-
- 8 Palette box (child of JP2 Header box)
-
- This (optional) box specifies the palette which maps a single
- component in index space to a multiple-component image.
-
-
-Element name
-
- paletteBox
-
-
-Reported properties
-
-|Property |Description |
-|nE |Number of entries in the table |
-|nPC |Number of palette columns |
-|bSign* |Indicates whether values created by|
-| |this palette column are signed or |
-| |unsigned (repeated for each column)|
-|bDepth* |Bit depth of values created by this|
-| |palette column (repeated for each |
-| |column) |
-|cP** |Value for this entry (repeated for |
-| |each column, and for the number of |
-| |entries) |
-
-
-
-
-Tests
-
-|Test name |True if |
-|nEIsValid |nE is within range [0,1024] |
-|nPCIsValid |nPC is within range [1,255] |
-|bDepthIsValid* |bDepth is within range [1,38] |
-| |(repeated for each column) |
-
-
-9 Component Mapping box (child of JP2 Header box)
-
- This (optional) box specifies the mapping between a palette and
- codestream components.
-
-
-Element name
-
- componentMappingBox
-
-
-Reported properties
-
-|Property |Description |
-|cMP* |Component index (repeated for each |
-| |channel) |
-|mTyp* |Specifies how channel is generated |
-| |from codestream component (repeated|
-| |for each channel) |
-|pCol* |Palette component index (repeated |
-| |for each channel) |
-
-
-Tests
-
-|Test name |True if |
-|cMPIsValid |cMP is within range [0,16384] |
-|mTypIsValid* |mTyp is within range [0,1] |
-| |(repeated for each channel) |
-|pColIsValid* |pCol is 0 if mTyp is 0 (repeated |
-| |for each channel) |
-
-
-
-10 Channel Definition box (child of JP2 Header box)
-
- This (optional) box specifies the type and ordering of the
- components within the codestream, as well as those created by the
- application of a palette.
-
-
-Element name
-
- channelDefinitionBox
-
-
-
-Reported properties
-
-|Property |Description |
-|n |Number of channel descriptions |
-|cN* |Channel index (repeated for each |
-| |channel) |
-|cTyp* |Channel type (repeated for each |
-| |channel) |
-|cAssoc* |Channel association (repeated for |
-| |each channel) |
-
-
-Tests
-
-|Test name |True if |
-|nIsValid |n is within range [1, 65535] |
-|boxLengthIsValid |(Size of box â 2) / equals 6*n |
-|cNIsValid* |cN is within range [0, 65535] |
-| |(repeated for each channel) |
-|cTypIsValid* |cType is within range [0, 65535] |
-| |(repeated for each channel) |
-|cAssocIsValid* |cAssoc is within range [0, 65535] |
-| |(repeated for each channel) |
-
-
-
-11 Resolution box (child of JP2 Header box, superbox)
-
- This (optional) box contains the grid resolution.
-
-
-Element name
-
- resolutionBox
-
-
-Reported properties
-
- Since this is a superbox, it contains one or two child boxes. These
- are represented as child elements in the properties tree:
-
-|Child element |Description |
-|captureResolutionBox |Properties from Capture Resolution |
-|(section 6.12) |box |
-|displayResolutionBox |Properties from Default Display |
-|(section 6.13) |Resolution box |
-
-
-Tests
-
-|Test name |True if |
-|containsCaptureOrDisplayRe|Box contains either a Capture |
-|solutionBox |Resolution box or a Default Display|
-| |Resolution box, or both |
-|noMoreThanOneCaptureResolu|Box contains no more than one |
-|tionBox |Capture Resolution box |
-|noMoreThanOneDisplayResolu|Box contains no more than one |
-|tionBox |Default Display Resolution box |
-
-
-12 Capture Resolution box (child of Resolution box)
-
- This (optional) box specifies the grid resolution at which the
- image was captured.
-
-
-Element name
-
- captureResolutionBox
-
-
-Reported properties
-
- Resolution information in this box is stored as a set of vertical
- and horizontal numerators, denominators and exponents. Jpylyzer
- also reports the corresponding grid resolutions in pixels per meter
- and pixels per inch, which are calculated from these values.
-
-|Property |Description |
-|vRcN |Vertical grid resolution numerator |
-|vRcD |Vertical grid resolution |
-| |denominator |
-|hRcN |Horizontal grid resolution |
-| |numerator |
-|hRcD |Horizontal grid resolution |
-| |denominator |
-|vRcE |Vertical grid resolution exponent |
-|hRcE |Horizontal grid resolution exponent|
-|vRescInPixelsPerMeter |Vertical grid resolution, expressed|
-| |in pixels per meter[7] |
-|hRescInPixelsPerMeter |Horizontal grid resolution, |
-| |expressed in pixels per meter[8] |
-|vRescInPixelsPerInch |Vertical grid resolution, expressed|
-| |in pixels per inch[9] |
-|hRescInPixelsPerInch |Horizontal grid resolution, |
-| |expressed in pixels per inch[10] |
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box contents equals 10 |
-| |bytes |
-|vRcNIsValid |vRcN is within range [1,65535] |
-|vRcDIsValid |vRcD is within range [1,65535] |
-|hRcNIsValid |hRcN is within range [1,65535] |
-|hRcDIsValid |hRcD is within range [1,65535] |
-|vRcEIsValid |vRcE is within range [-127,128] |
-|hRcEIsValid |hRcE is within range [-127,128] |
-
-
-13 Default Display Resolution box (child of Resolution box)
-
- This (optional) box specifies the default grid resolution at which
- the image should be displayed.
-
-
-Element name
-
- displayResolutionBox
-
-
-Reported properties
-
- Resolution information in this box is stored as a set of vertical
- and horizontal numerators, denominators and exponents. Jpylyzer
- also reports the corresponding grid resolutions in pixels per meter
- and pixels per inch, which are calculated from these values.
-
-|Property |Description |
-|vRdN |Vertical grid resolution numerator |
-|vRdD |Vertical grid resolution |
-| |denominator |
-|hRdN |Horizontal grid resolution |
-| |numerator |
-|hRdD |Horizontal grid resolution |
-| |denominator |
-|vRdE |Vertical grid resolution exponent |
-|hRdE |Horizontal grid resolution exponent|
-|vResdInPixelsPerMeter |Vertical grid resolution, expressed|
-| |in pixels per meter[11] |
-|hResdInPixelsPerMeter |Horizontal grid resolution, |
-| |expressed in pixels per meter[12] |
-|vResdInPixelsPerInch |Vertical grid resolution, expressed|
-| |in pixels per inch[13] |
-|hResdInPixelsPerInch |Horizontal grid resolution, |
-| |expressed in pixels per inch[14] |
-
-
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box contents equals 10 |
-| |bytes |
-|vRdNIsValid |vRdN is within range [1,65535] |
-|vRdDIsValid |vRdD is within range [1,65535] |
-|hRdNIsValid |hRdN is within range [1,65535] |
-|hRdDIsValid |hRdD is within range [1,65535] |
-|vRdEIsValid |vRdE is within range [-127,128] |
-|hRdEIsValid |hRdE is within range [-127,128] |
-
-
-14 Contiguous Codestream box
-
- This box contains the codestream. See chapter 7.
-
-
-15 Intellectual Property box
-
- This (optional) box contains intellectual property information
- about the image. The JP2 format specification (ISO/IEC 15444-1)
- does not provide any specific information about this box, other
- than stating that âthe definition of the format of [its] contents
- [â¦] is reserved for ISOâ. As a result, jpylyzer does not currently
- include a validator function for this box, which is now simply
- ignored. Jpylyzer will display a user warning message in that case.
-
-
-16 XML box
-
- This (optional) box contains XML formatted information.
-
-
-Element name
-
- xmlBox
-
-
-Reported properties
-
- If the contents of this box are well-formed XML (see âtestsâ
- below), the âxmlBoxâ element in the properties tree will contain
- the contents of the XML box. Note that, depending on the character
- encoding of the original XML, it may contain characters that are
- not allowed in the encoding that is used for jpylyzerâs output. Any
- such characters will be represented by numerical entity references
- in the output. If the box contents are not well-formed XML, no
- properties are reported for this box.
-
-
-Tests
-
-|Test name |True if |
-|containsWellformedXML |Contents of box are parsable, |
-| |well-formed XML |
-
-
- Note that jpylyzer does not check whether the XML is valid, as this
- is not required by the standard. Besides, doing so would make
- jpylyzer significantly slower for XML that contains references to
- external schemas and DTDs.
-
-
-17 UUID box
-
- This (optional) box contains additional (binary) information, which
- may be vendor-specific. Some applications (e.g. Kakadu and
- ExifTool) also use this box for storing XMP metadata (see Section
- 1.1.4 in Part 3 of the XMP specification[15]).
-
-
-Element name
-
- uuidBox
-
-
-Reported properties
-
- If the value of uuid indicates the presence of XMP metadata and the
- contents of this box are well-formed XML, (see âtestsâ below), the
- âuuidBoxâ element in the properties tree will contain the XMP data.
- Note that, depending on the character encoding of the original XML,
- it may contain characters that are not allowed in the encoding that
- is used for jpylyzerâs output. Any such characters will be
- represented by numerical entity references in the output. In all
- other cases, the âuuidBoxâ element will contain a standard string
- representation the of UUID.
-
-|Property |Description |
-|uuid |Standard string representation of |
-| |UUID (only if uuid has value other |
-| |than |
-| |be7acfcb-97a9-42e8-9c71-999491e3afa|
-| |c). For an explanation of UUIDs see|
-| |e.g. Leach et al., 2005. |
-|XMP data |XMP metadata (only if uuid has |
-| |value |
-| |be7acfcb-97a9-42e8-9c71-999491e3afa|
-| |c) |
-
-
-
- Note that except for the XMP case, jpylyzer will not be able to
- report any information on the actual contents of this box, since it
- is defined outside of the scope of JPEG 2000.
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box contents is greater |
-| |than 16 bytes |
-|containsWellformedXML |Contents of box are parsable, |
-| |well-formed XML (this test is only |
-| |performed if uuid has value |
-| |be7acfcb-97a9-42e8-9c71-999491e3afa|
-| |c) |
-
-
-
-
-18 UUID Info box (superbox)
-
- This (optional) box contains additional information associated with
- a UUID.
-
-
-Element name
-
- uuidInfoBox
-
-
-Reported properties
-
- This is a superbox which contains two child boxes. These are
- represented as child elements in the properties tree:
-
-|Child element |Description |
-|uuidListBox (section 6.19)|Properties from UUID List box |
-|urlBox (section 6.20) |Properties from Data Entry URL box |
-
-
-Tests
-
-|Test name |True if |
-|containsOneListBox |Box contains exactly one UUID List |
-| |box |
-|containsOneURLBox |Box contains exactly one Data Entry|
-| |URL box |
-
-
-
-19 UUID List box (child of UUID Info box)
-
- This (optional) box specifies a list of UUIDs.
-
-
-Element name
-
- uuidListBox
-
-
-Reported properties
-
-|Property |Description |
-|nU |Number of UUIDs |
-|uuid* |Standard string representation of |
-| |UUID (repeated nU times) |
-
-
-Tests
-
-|Test name |True if |
-|boxLengthIsValid |Size of box equals nU*16 + 2 |
-
-
-
-20 Data Entry URL box (child of UUID Info box)
-
- This (optional) box specifies a URL.
-
-
-Element name
-
- urlBox
-
-
-Reported properties
-
-|Property |Description |
-|version |Version number |
-|loc |Location, which specifies a URL of |
-| |the additional information |
-| |associated with the UUIDs in the |
-| |UUID List box that resides in the |
-| |same UUID Info box |
-
-
-Tests
-
-|Test name |True if |
-|flagIsValid |Three bytes that make up âflagâ |
-| |field equal 0x00 00 00 (âflagâ is |
-| |not reported to output because it |
-| |only contains null bytes) |
-|locIsUTF8 |Location (URL) can be decoded to |
-| |UTF-8 |
-|locHasNullTerminator |Location (URL) is a null-terminated|
-| |string |
-
-
-
-21 Unknown box
-
- An image may contain boxes that are not defined by ISO/IEC 15444-1.
- Although jpylyzer ignores such boxes, it will report some minimal
- info that will allow interested users to identify them to a limited
- extent.
-
-
-Element name
-
- unknownBox
-
-
-Reported properties
-
-|Property |Description |
-|boxType |Four-character text string that |
-| |specifies the type of information |
-| |that is found in this box |
-| |(corresponds to TBox in section I.4|
-| |of ISO/IEC 15444-1). |
-
-
-
-22 Top-level tests and properties
-
- This section describes the tests and output for the top file level.
-
-
-Element name
-
- properties
-
-
-Reported properties
-
- The metrics that are listed here are not âpropertiesâ in a strict
- sense; instead they are secondary or derived metrics that are
- calculated by combining information from different parts / boxes of
- the file.
-
-|Property |Description |
-|compressionRatio |Compression ratio |
-
-
-
- The compression ratio is calculated as the ratio between the size
- of the uncompressed image data and the actual file size:
-
- [pic]
-
- Here, sizeCompressed is simply the file size (fileSizeInBytes in
- output fileâs âfileInfoâ element). The uncompressed size (in bytes)
- can be calculated by multiplying the number of bytes per pixel by
- the total number of pixels:
-
- [pic]
-
- With:
-
-|nC |: number of image components (from Image Header box)|
-|i |: component index |
-|bPCDepthi|: bits per component for component i (from Image |
-| |Header box or Bits Per |
-| |Component box) |
-|height |: image height (from Image Header box) |
-|width |: image width (from Image Header box) |
-
-
-
- In addition, the root of the properties tree contains the elements
- for all top-level boxes:
-
-
-
-
- |Child element |Description |
-|signatureBox (section 6.2)|Properties from JPEG 2000 Signature|
-| |box |
-|fileTypeBox (section 6.3) |Properties from File Type box |
-|jp2HeaderBox (section 6.4)|Properties from JP2 Header box |
-|contiguousCodestreamBox |Properties from Contiguous |
-|(chapter 7) |Codestream box |
-|intellectualPropertyBox |Properties from Intellectual |
-|(section 6.15) |Property box (optional) |
-|xmlBox (section 6.16) |Properties from XML box (optional) |
-|uuidBox (section 6.17) |Properties from UUID box (optional)|
-|uuidInfoBox (section 6.18)|Properties from UUID Info box |
-| |(optional) |
-
-
-
-
-Tests
-
- The tests that jpylyzer performs at the root level fall in either
- of the following two categories:
-
- 1. Tests for the presence of required top-level boxes, the order in
- which they appear and restrictions on the number of instances for
- specific boxes
-
- 2. Tests for consistency of information in different parts of the
- file. In particular, a lot of the information in the Image Header
- box is redundant with information in the codestream header, and
- jpylyzer performs a number of tests to verify the consistency
- between these two.
-
-
-
-
- |Test name |True if |
-|containsSignatureBox |File root contains a JPEG 2000 |
-| |Signature box |
-|containsFileTypeBox |File root contains a File Type box |
-|containsJP2HeaderBox |File root contains a JP2 Header box|
-|containsContiguousCodestre|File root contains a Contiguous |
-|amBox |Codestream box |
-|containsIntellectualProper|File root contains an Intellectual |
-|tyBox |Property box, which is required if |
-| |iPR field in Image Header Box |
-| |equals 1 (test is skipped |
-| |otherwise) |
-|firstBoxIsSignatureBox |First box is JPEG 2000 Signature |
-| |box |
-|secondBoxIsFileTypeBox |Second box is File Type box |
-|locationJP2HeaderBoxIsVali|JP2 Header box is located after |
-|d |File Type Box and before (first) |
-| |Contiguous Codestream box |
-|noMoreThanOneSignatureBox |File root contains no more than one|
-| |JPEG 2000 Signature box |
-|noMoreThanOneFileTypeBox |File root contains no more than one|
-| |File Type box |
-|noMoreThanOneJP2HeaderBox |File root contains no more than one|
-| |JP2 Header box |
-|heightConsistentWithSIZ |Value of height from Image Header |
-| |Box equals ysiz âyOsiz from |
-| |codestream SIZ header |
-|widthConsistentWithSIZ |Value of width from Image Header |
-| |Box equals xsiz âxOsiz from |
-| |codestream SIZ header |
-|nCConsistentWithSIZ |Value of nC from Image Header Box |
-| |equals csiz from codestream SIZ |
-| |header |
-|bPCSignConsistentWithSIZ |Values of bPCSign from Image Header|
-| |box (or Bits Per Component box) are|
-| |equal to corresponding ssizSign |
-| |values from codestream SIZ header |
-|bPCDepthConsistentWithSIZ |Values of bPCDepth from Image |
-| |Header box (or Bits Per Component |
-| |box) are equal to corresponding |
-| |ssizDepth values from codestream |
-| |SIZ header |
-
-
-
-
-
-
- Contiguous Codestream box
-
-
-1 General codestream structure
-
- The Contiguous Codestream box holds the JPEG 2000 codestream, which
- contains the actual image data in a JP2.
-
-
-Markers and marker segments
-
- A codestream is made up of a number of functional entities which
- are called markers and marker segments. A marker is essentially a 2-
- byte delimiter that delineates the start or end position of a
- functional entity. A marker segment is the combination of a marker
- and a set of associated parameters (segment parameters). However,
- not every marker has any associated parameters.
-
-
-General structure of the codestream
-
- The codestream is made up of the following components (illustrated
- in Figure 7-1):
-
- 1. A start of codestream marker that indicates the start of the
- codestream
-
- 2. A main codestream header (which includes a number of header marker
- segments)
-
- 3. A sequence of one or more tile parts. Each tile part consists of
- the following components:
-
- a. A start of tile-part marker segment, which indicates the start of a
- tile part and which also contains index information of the tile
- part and its associated tile
-
- b. Optionally this may be followed by one or more additional tile-part
- header marker segments
-
- c. A start of data marker that indicates the start of the bitstream
- for the current tile part
-
- d. The bitstream
-
- 4. An âend of codestreamâ marker that indicates the end of the
- codestream.
-
- [pic]
-
- Figure 7-1 General structure of a JPEG 2000 codestream.
-
-
-2 Limitations of codestream validation
-
- It is important to stress here that jpylyzer currently doesnât
- support the full set of marker segments that can occur in a
- codestream. As a result, the validation of codestreams is somewhat
- limited. These limitations are discussed in this section.
-
-
-Main codestream header
-
- Annex A of ISO/IEC 15444-1 lists a total of 13 marker segments that
- can occur in the main codestream header. Most of these are
- optional. The current version of jpylyzer only offers full support
- (i.e. reads and validates) for the following main header marker
- segments (which includes all the required ones):
-
- ⢠Start of codestream (SOC) marker segment (required)
-
- ⢠Image and tile size (SIZ) marker segment (required)
-
- ⢠Coding style default (COD) marker segment (required)
-
- ⢠Quantization default (QCD) marker segment (required)
-
- ⢠Comment (COM) marker segment (optional)
-
- In addition the codestream header may also contain any of the
- following marker segments, which are all optional:
-
- ⢠Coding style component (COC) marker segment (optional)*
-
- ⢠Region-of-interest (RGN) marker segment (optional) *
-
- ⢠Quantization component (QCC) marker segment (optional) *
-
- ⢠Progression order change (POC) marker segment (optional) *
-
- ⢠Packet length, main header (PLM) marker segment (optional) *
-
- ⢠Packed packet headers, main header (PPM) marker segment (optional)
- *
-
- ⢠Tile-part lengths (TLM) marker segment (optional) *
-
- ⢠Component registration (CRG) marker segment (optional) *
-
- The above marker segments (which are marked with an asterisk) are
- only minimally supported at this stage: if jpylyzer encounters any
- of them, it will include the corresponding element in the
- properties element of the output. However, jpylyzer currently does
- not analyse the contents of these marker segments, which means that
- the respective elements in the output will be empty.
-
-
-Tile parts
-
- The tile part validation has similar limitations. The standard
- lists 11 marker segments that can occur in the tile part header.
- Currently, jpylyzer only fully supports the following ones:
-
- ⢠Start of tile part (SOT) marker segment (required)
-
- ⢠Coding style default (COD) marker segment (optional)
-
- ⢠Quantization default (QCD) marker segment (optional)
-
- ⢠Comment (COM) marker segment (optional)
-
- ⢠Start of data (SOD) marker segment (required)
-
- In addition the following optional marker segments may also occur:
-
- ⢠Coding style component (COC) marker segment (optional)*
-
- ⢠Region-of-interest (RGN) marker segment (optional) *
-
- ⢠Quantization component (QCC) marker segment (optional) *
-
- ⢠Progression order change (POC) marker segment (optional) *
-
- ⢠Packet length, tile-part header (PLT) marker segment (optional) *
-
- ⢠Packed packet headers, tile-part header (PPT) marker segment
- (optional) *
-
- These marker segments (which are marked with an asterisk) are only
- minimally supported at this stage: if jpylyzer encounters any of
- them, it will include the corresponding element in the properties
- element of the output. However, jpylyzer currently does not analyse
- their contents, and the respective elements in the output will be
- empty.
-
-
-Bit streams
-
- In addition to the above limitations, jpylyzer can not be used to
- establish whether the data in the bitstream are correct (this would
- require decoding the compressed image data, which is completely out
- of jpylyzerâs scope)[16]. As a result, if jpylyzer is used as part
- of a quality assurance workflow, it is recommended to also include
- an additional check on the image contents[17]. Also, jpylyzer does
- not perform any checks on marker segments within the bit-stream:
- start-of packet (SOP) and end-of-packet (EPH) markers.
-
-
-Detection of incomplete or truncated codestreams
-
- A JP2âs tile part header contains information that makes it
- possible to detect incomplete and truncated codestreams in most
- cases. Depending on the encoder software used, this method may fail
- for images that only contain one single tile part (i.e. images that
- do not contain tiling).
-
-
-Current limitations of comment extraction
-
- Both the codestream header and the tile part header can contain
- comment marker segments, which are used for embedding arbitrary
- binary data or text. Jpylyzer will extract the contents of any
- comments that are text.
-
-
-3 Structure of reported output
-
- Figure 7-2 illustrates the structure of jpylyzerâs codestream-level
- output. At the top level, the SIZ, COD, QCD and COM marker segments
- are each represented as individual sub elements. The tile part
- properties are nested in a tileParts element, where each individual
- tile part is represented as a separate tilePart sub element.
-
- [pic]
-
- Figure 7-2 Structure of codestream-level XML output
-
-
-
-
-
- 4 Contiguous Codestream box
-
-
-Element name
-
- contiguousCodestreamBox
-
-
-Reported properties
-
- The reported properties for this box are organised into a number
- groups, which are represented as child elements in the properties
- tree:
-
-
-
-
-
- |Child element |Description |
-|siz (section 7.5) |Properties from the image and tile |
-| |size (SIZ) marker segment |
-| |(codestream main header) |
-|cod (section 7.6) |Properties from the coding style |
-| |default (COD) marker segment |
-| |(codestream main header) |
-|qcd (section 7.7) |Properties from the quantization |
-| |default (QCD) marker segment |
-| |(codestream main header) |
-|com (section 7.8) |Properties from the (optional) |
-| |comment (COM) marker segment |
-| |(codestream main header) |
-|tileParts (section 7.9) |Properties from individual tile |
-| |parts |
-
-
-Tests
-
-|Test name |True if |
-|codestreamStartsWithSOCMar|First 2 bytes in codestream |
-|ker |constitute a start of codestream |
-| |(SOC) marker segment |
-|foundSIZMarker |Second marker segment in codestream|
-| |is image and tile size (SIZ) |
-| |marker segment |
-|foundCODMarker |Codestream main header contains |
-| |coding style default (COD) marker |
-| |segment |
-|foundQCDMarker |Codestream main header contains |
-| |quantization default (QCD) marker |
-| |segment |
-|quantizationConsistentWith|Values of quantization parameters |
-|Levels |from QCD marker segment are |
-| |consistent with levels from COD |
-| |marker segment[18] |
-|foundExpectedNumberOfTiles|Number of encountered tiles is |
-| |consistent with expected number of |
-| |tiles (as calculated from SIZ |
-| |marker, see section 7.5) |
-|foundExpectedNumberOfTileP|For all tiles, number of |
-|arts |encountered tile parts is |
-| |consistent with expected number of |
-| |tile parts (values of tnsot from |
-| |SOT marker, see section 7.10) |
-|foundEOCMarker |Last 2 bytes in codestream |
-| |constitute an end of codestream |
-| |(EOC) marker segment |
-
-
-
-
-
-
-5 Image and tile size (SIZ) marker segment (child of Contiguous Codestream
- box)
-
-
-Element name
-
- siz
-
-
-Reported properties
-
-|Property |Description |
-|lsiz |Length of SIZ marker segment in |
-| |bytes |
-|rsiz |Decoder capabilities |
-|xsiz |Width of reference grid |
-|ysiz |Heigth of reference grid |
-|xOsiz |Horizontal offset from origin of |
-| |reference grid to left of image |
-| |area |
-|yOsiz |Vertical offset from origin of |
-| |reference grid to top of image area|
-|xTsiz |Width of one reference tile with |
-| |respect to the reference grid |
-|yTsiz |Height of one reference tile with |
-| |respect to the reference grid |
-|xTOsiz |Horizontal offset from origin of |
-| |reference grid to left side of |
-| |first tile |
-|yTOsiz |Vertical offset from origin of |
-| |reference grid to top side of first|
-| |tile |
-|numberOfTiles |Number of tiles[19] |
-|csiz |Number of components |
-|ssizSign* |Indicates whether image component |
-| |is signed or unsigned (repeated for|
-| |each component) |
-|ssizDepth* |Number of bits for this component |
-| |(repeated for each component) |
-|xRsiz* |Horizontal separation of sample of |
-| |this component with respect to |
-| |reference grid (repeated for each |
-| |component) |
-|yRsiz* |Vertical separation of sample of |
-| |this component with respect to |
-| |reference grid (repeated for each |
-| |component) |
-
-
-
-
-Tests
-
-|Test name |True if |
-|lsizIsValid |lsiz is within range [41,49190] |
-|rsizIsValid |rsiz equals 0 (âISO/IEC 15444-1â), |
-| |1 (âProfile 0â) or 2 (âProfile 1â) |
-|xsizIsValid |xsiz is within range [1,232 - 1] |
-|ysizIsValid |ysiz is within range [1,232 - 1] |
-|xOsizIsValid |xOsiz is within range [0,232 - 2] |
-|yOsizIsValid |yOsiz is within range [0,232 - 2] |
-|xTsizIsValid |xTsiz is within range [1,232 - 1] |
-|yTsizIsValid |yTsiz is within range [1,232 - 1] |
-|xTOsizIsValid |xTOsiz is within range [0,232 - 2]|
-|yTOsizIsValid |yTOsiz is within range [0,232 - 2]|
-|csizIsValid |csiz is within range [1,16384] |
-|lsizConsistentWithCsiz |lsiz equals 38 + 3*csiz |
-|ssizIsValid* |ssizDepth is within range [1,38] |
-| |(repeated for each component) |
-|xRsizIsValid* |xRsiz is within range [1,255] |
-| |(repeated for each component) |
-|yRsizIsValid* |yRsiz is within range [1,255] |
-| |(repeated for each component) |
-
-
-
-
-
-
-
-
-6 Coding style default (COD) marker segment
-
-
-Element name
-
- cod
-
-
-Reported properties
-
-|Property |Description |
-|lcod |Length of COD marker segment in |
-| |bytes |
-|precincts |Indicates use of precincts |
-| |(âyesâ/ânoâ) |
-|sop |Indicates use of start of packet |
-| |marker segments (âyesâ/ânoâ) |
-|eph |Indicates use of end of packet |
-| |marker segments (âyesâ/ânoâ) |
-|order |Progression order |
-|layers |Number of layers |
-|multipleComponentTransform|Indicates use of multiple component|
-|ation |transformation (âyesâ/ânoâ) |
-|levels |Number of decomposition levels |
-|codeBlockWidth |Code block width |
-|codeBlockHeight |Code block height |
-|codingBypass |Indicates use of coding bypass |
-| |(âyesâ/ânoâ) |
-|resetOnBoundaries |Indicates reset of context |
-| |probabilities on coding pass |
-| |boundaries (âyesâ/ânoâ) |
-|termOnEachPass |Indicates termination on each |
-| |coding pass (âyesâ/ânoâ) |
-|vertCausalContext |Indicates vertically causal context|
-| |(âyesâ/ânoâ) |
-|predTermination |Indicates predictable termination |
-| |(âyesâ/ânoâ) |
-|segmentationSymbols |Indicates use of segmentation |
-| |symbols (âyesâ/ânoâ) |
-|transformation |Wavelet transformation: â9-7 |
-| |irreversibleâ or â5-3 reversibleâ |
-|precinctSizeX* |Precinct width (repeated for each |
-| |resolution level; order: low to |
-| |high) (only if precincts is âyesâ) |
-|precinctSizeY* |Precinct heigth (repeated for each |
-| |resolution level; order: low to |
-| |high) (only if precincts is âyesâ) |
-
-
-
-
-Tests
-
-|Test name |True if |
-|lcodIsValid |lcod is within range [12,45] |
-|orderIsValid |order equals 0 (âLRCPâ), 1 |
-| |(âRLCPâ), 2 (âRPCLâ), 3 (âPCRLâ) or|
-| |4 (âCPRLâ) |
-|layersIsValid |layers is within range [1,65535] |
-|multipleComponentTransform|multipleComponentTransformation |
-|ation |equals 0 or 1 |
-|IsValid | |
-|levelsIsValid |levels is within range [0,32] |
-|lcodConsistentWithLevelsPr|lcod equals 12 (precincts = ânoâ) |
-|ecincts |or lcod equals 13 + levels |
-| |(precincts = âyesâ) |
-|codeBlockWidthExponentIsVa|codeBlockWidthExponent is within |
-|lid |range [2,10] |
-|codeBlockHeightExponentIsV|codeBlockHeightExponent is within |
-|alid |range [2,10] |
-|sumHeightWidthExponentIsVa|codeBlockWidthExponent + |
-|lid |codeBlockHeightExponent ⤠12 |
-|precinctSizeXIsValid* |precinctSizeX ⥠2 (except lowest |
-| |resolution level) (repeated for |
-| |each resolution level; order: low |
-| |to high) (only if precincts is |
-| |âyesâ) |
-|precinctSizeYIsValid* |precinctSizeY ⥠2 (except lowest |
-| |resolution level) (repeated for |
-| |each resolution level; order: low |
-| |to high) (only if precincts is |
-| |âyesâ) |
-
-
-
-
-
-
-
-
-
- 7 Quantization default (QCD) marker segment
-
-
-Element name
-
- qcd
-
-
-Reported properties
-
-|Property |Description |
-|lqcd |Length of QCD marker segment in |
-| |bytes |
-|qStyle |Quantization style for all |
-| |components |
-|guardBits |Number of guard bits |
-|epsilon* |If qStyle equals 0 (âno |
-| |quantizationâ): Epsilon exponent in|
-| |Eq E-5 of ISO/IEC 15444-1 |
-| |(repeated for all decomposition |
-| |levels; order: low to high) |
-| |If qStyle equals 1 (âscalar |
-| |derivedâ): Epsilon exponent in Eq |
-| |E-3 of ISO/IEC 15444-1 |
-| |If qStyle equals 2 (âscalar |
-| |expoundedâ): Epsilon exponent in Eq|
-| |E-3 of ISO/IEC 15444-1 (repeated |
-| |for all decomposition levels; |
-| |order: low to high) |
-|mu* |If qStyle equals 1 (âscalar |
-| |derivedâ): mu constant in Eq E-3 of|
-| |ISO/IEC 15444-1 |
-| |if qStyle equals 2 (âscalar |
-| |expoundedâ) : mu constant in Eq E-3|
-| |of ISO/IEC 15444-1 (repeated for |
-| |all decomposition levels; order: |
-| |low to high) |
-
-
-Tests
-
-|Test name |True if |
-|lqcdIsValid |lqcd is within range [4,197] |
-|qStyleIsValid |qStyle equals 0 (âno |
-| |quantizationâ), 1 (âscalar |
-| |derivedâ), or 2 (âscalar |
-| |expoundedâ) |
-
-
-
-
-
-
-
-
-
- 8 Comment (COM) marker segment
-
-
-Element name
-
- com
-
-
-Reported properties
-
-|Property |Description |
-|lcom |Length of COM marker segment in |
-| |bytes |
-|rcom |Registration value of marker |
-| |segment (indicates whether this |
-| |comment contains binary data or |
-| |text) |
-|comment |Embedded comment as text (only if |
-| |rcom = 1 ) |
-
-
-Tests
-
-|Test name |True if |
-|lcomIsValid |lqcd is within range [5,65535] |
-|rcomIsValid |rcom equals 0 (âbinaryâ) or 1 |
-| |(âISO/IEC 8859-15 (Latinâ)) |
-|commentIsValid |Comment is valid ISO/IEC8859-15 and|
-| |does not contain control |
-| |characters, other than tab, newline|
-| |or carriage return |
-
-
-
-
-
-
-
-
-9 Tile part (child of Contiguous Codestream box)
-
- Tile-part level properties and tests. This is not a box or a marker
- segment!
-
-
-Element name
-
- tilePart (child of tileParts)
-
-
-Reported properties
-
- Each tile part element can contain a number of child elements:
-
-|Child element |Description |
-|sot (section 7.10) |Properties from start of tile (SOT)|
-| |marker segment |
-|cod (section 7.6) |Properties from the (optional) |
-| |coding style default (COD) marker |
-| |segment (tile part header) |
-|qcd (section 7.7) |Properties from the (optional) |
-| |quantization default (QCD) marker |
-| |segment (tile part header) |
-|com (section 7.8) |Properties from the (optional) |
-| |comment (COM) marker segment (tile |
-| |part header) |
-
-
-Tests
-
-|Test name |True if |
-|foundNextTilePartOrEOC |Tile part start offset + |
-| |tilePartLength points to either |
-| |start of new tile or EOC marker |
-| |(useful for detecting |
-| |within-codestream byte corruption) |
-|foundSODMarker |Last marker segment of tile part is|
-| |a start-of-data (SOD) marker |
-
-
-
-
-
-
-10 Start of tile part (SOT) marker segment (child of tile part)
-
-
-Element name
-
- sot
-
-
-
-Reported properties
-
-|Property |Description |
-|lsot |Length of SOT marker segment in |
-| |bytes |
-|isot |Tile index |
-|psot |Length of tile part |
-|tpsot |Tile part index |
-|tnsot |Number of tile-parts of a tile in |
-| |the codestream (value of 0 |
-| |indicates that number of tile-parts|
-| |of tile in the codestream is not |
-| |defined in current header) |
-
-
-Tests
-
-|Test name |True if |
-|lsotIsValid |lsot equals 10 |
-|isotIsValid |isot is within range [0,65534] |
-|psotIsValid |psot is not within range [1,13] |
-|tpsotIsValid |tpsot is within range [0,254] |
-
-
-The following marker segments are only minimally supported: jpylyzer will
-report their presence in the properties element, but it does not perform
-any further tests or analyses. This may change in upcoming versions of the
-software.
-
-
-11 Coding style component (COC) marker segment
-
-
-Element name
-
- coc
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 12 Region-of-interest (RGN) marker segment
-
-
-Element name
-
- rgn
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 13 Quantization component (QCC) marker segment
-
-
-Element name
-
- qcc
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 14 Progression order change (POC) marker segment
-
-
-Element name
-
- poc
-
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 15 Packet length, main header (PLM) marker segment
-
-
-Element name
-
- plm
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 16 Packed packet headers, main header (PPM) marker segment
-
-
-Element name
-
- ppm
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 17 Tile-part lengths (TLM) marker segment
-
-
-Element name
-
- tlm
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 18 Component registration (CRG) marker segment
-
-
-Element name
-
- crg
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 19 Packet length, tile-part header (PLT) marker segment
-
-
-Element name
-
- plt
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
- 20 Packed packet headers, tile-part header (PPT) marker segment
-
-
-Element name
-
- ppt
-
-
-Reported properties
-
-|Property |Description |
-| | |
-| | |
-
-
-Tests
-
-|Test name |True if |
-| | |
-| | |
-
-
-
-
-
-
-
-
-
- References
-
- ICC. Specification ICC.1:1998-09 â File Format for Color Profiles.
- International Color Consortium, 1998. 29 December 2010
- <http://www.color.org/ICC-1_1998-09.pdf>.
-
- ISO/IEC. Information technology â JPEG 2000 image coding system:
- Core coding system. ISO/IEC 15444-1, Second edition. Geneva:
- ISO/IEC, 2004a. 28 Dec 2010 <http://www.jpeg.org/public/15444-
- 1annexi.pdf> (âAnnex I: JP2 file format syntaxâ only).
-
- ISO/IEC. Information technology â JPEG 2000 image coding system:
- Extensions. ISO/IEC 15444-2, First edition. Geneva: ISO/IEC, 2004b.
- 28 Dec 2010 <http://www.jpeg.org/public/15444-2annexm.pdf> (âAnnex
- M: JPX extended file format syntaxâ only).
-
- Leach, P., Mealling, M. & Salz, R. A Universally Unique IDentifier
- (UUID) URN namespace. Memo, IETF. July 2005
- <http://tools.ietf.org/html/rfc4122.html>.
-
-
-
-
-
- -----------------------
- [1] The jpylyzer binaries were created using the PyInstaller
- package: http://www.pyinstaller.org/
- [2] Note that jpylyzer will not work under Python versions 3.0-3.1!
-
-
-
- [3] Note that jpylyzer versions 1.8 and earlier returned a
- formatted XML string instead of an element object!
- [4] Note that jpylyzer versions 1.4 and earlier used the verbose
- output format by default. This behaviour has changed in version 1.5
- onwards, as the lengthy output turned out to be slightly confusing
- to some users.
- [5] The âAny ICCâ method is defined in ISO/IEC 15444-2 (the JPX
- format), and is not allowed in JP2. However, jpylyzer offers
- limited support for JPX here by also reporting the properties of
- ICC profiles that were embedded using this method. Note that any
- file that uses this method will fail the âmethIsValidâ test (and
- thereby the validation).
- [6] Important: ISO/IEC 15444-1 only allows âinput deviceâ profiles.
- Support of âdisplay deviceâ profiles will most likely be added soon
- through an amendment to the standard. Jpylyzer is already
- anticipating these changes, but by doing so it is deviating from
- the existing standard in the interim period.
- [7] Calculated as: [pic]
- [8] Calculated as: [pic]
- [9] Calculated as: [pic]
- [10] Calculated as: [pic]
- [11] Calculated as: [pic]
- [12] Calculated as: [pic]
- [13] Calculated as: [pic]
- [14] Calculated as: [pic]
- [15] Link:
- http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet
- /xmp/pdfs/cs6/XMPSpecificationPart3.pdf
- [16] However, support for start of packet (SOP) and end of packet
- (EPH) markers may be included in future versions.
- [17][pic][18]2MNZ[opqrstuvyz{?¶· For example, in a TIFF to JP2
- conversion workflow one could include a pixel-by-pixel comparison
- of the values in the TIFF and the JP2.
- [19] The consistency check verifies if the length of the
- quantization default marker segment (lqcd from qcd) is consistent
- with the quantization style (qStyle from qcd) and the number of
- decomposition levels (levels from cod). They are consistent if the
- following equation is true:
- [pic]
- [20] Calculated as [pic]
-
-
Added: packages/jpylyzer/trunk/debian/patches/readme.patch
===================================================================
--- packages/jpylyzer/trunk/debian/patches/readme.patch (rev 0)
+++ packages/jpylyzer/trunk/debian/patches/readme.patch 2015-05-21 13:26:07 UTC (rev 32753)
@@ -0,0 +1,15 @@
+Description: Fix install
+Author: Mathieu Malaterre <malat at debian.org>
+Forwarded: https://github.com/openpreserve/jpylyzer/pull/69
+
+--- jpylyzer-1.14.2.orig/setup.py
++++ jpylyzer-1.14.2/setup.py
+@@ -4,7 +4,7 @@ from distutils.core import setup
+
+ # TO DO: figure out how to import version number automatically from code!
+
+-readme = open('README.txt', 'r')
++readme = open('README.md', 'r')
+ README_TEXT = readme.read()
+ readme.close()
+
Added: packages/jpylyzer/trunk/debian/patches/series
===================================================================
--- packages/jpylyzer/trunk/debian/patches/series (rev 0)
+++ packages/jpylyzer/trunk/debian/patches/series 2015-05-21 13:26:07 UTC (rev 32753)
@@ -0,0 +1 @@
+readme.patch
Modified: packages/jpylyzer/trunk/debian/python-jpylyzer-doc.docs
===================================================================
--- packages/jpylyzer/trunk/debian/python-jpylyzer-doc.docs 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/python-jpylyzer-doc.docs 2015-05-21 13:26:07 UTC (rev 32753)
@@ -1,2 +1,2 @@
doc/jpylyzerUserManual.pdf
-debian/jpylyzerUserManual.txt
+doc/jpylyzerUserManual.txt
Modified: packages/jpylyzer/trunk/debian/rules
===================================================================
--- packages/jpylyzer/trunk/debian/rules 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/rules 2015-05-21 13:26:07 UTC (rev 32753)
@@ -4,6 +4,7 @@
dh $@ --with python2
VERSION=$(shell dpkg-parsechangelog | grep '^Version' | cut -d' ' -f2 | cut -f1 -d-)
+
override_dh_install:
pod2man --section=1 --release=$(VERSION) --center "" debian/jpylyzer.pod > jpylyzer.1
dh_install
@@ -11,8 +12,14 @@
override_dh_clean:
dh_clean Makefile
dh_clean jpylyzer.1
+ dh_clean doc/jpylyzerUserManual.pdf
dh_clean
+override_dh_auto_build:
+ dh_auto_build
+ (cd doc && pandoc -s --toc --toc-depth=2 -N --chapters --latex-engine=xelatex -o jpylyzerUserManual.pdf jpylyzerUserManual.md)
+ (cd doc && pandoc -o jpylyzerUserManual.txt jpylyzerUserManual.md)
+
override_dh_compress:
dh_compress -X.pdf
@@ -20,7 +27,4 @@
uscan --verbose --force-download --rename
debian/jpylyzer.pod:
- wget -O debian/jpylyzer.pod https://raw.github.com/openplanets/jpylyzer/master/debian/jpylyzer.pod
-
-debian/jpylyzerUserManual.txt:
- antiword doc/jpylyzerUserManual.doc > debian/jpylyzerUserManual.txt
+ wget -O debian/jpylyzer.pod https://raw.githubusercontent.com/openpreserve/jpylyzer/master/debian/jpylyzer.pod
Modified: packages/jpylyzer/trunk/debian/watch
===================================================================
--- packages/jpylyzer/trunk/debian/watch 2015-05-21 05:15:16 UTC (rev 32752)
+++ packages/jpylyzer/trunk/debian/watch 2015-05-21 13:26:07 UTC (rev 32753)
@@ -1,2 +1,2 @@
version=3
-https://github.com/openplanets/jpylyzer/tags .*/(\d[\d\.]+).tar.gz
+https://github.com/openpreserve/jpylyzer/tags .*/(\d[\d\.]+).tar.gz
More information about the Python-modules-commits
mailing list