<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Disruptive Library Technology Jester &#187; Kakadu Software</title> <atom:link href="http://dltj.org/tag/kakadusoftware/feed/" rel="self" type="application/rss+xml" /><link>http://dltj.org</link> <description>We&#039;re Disrupted, We&#039;re Librarians, and We&#039;re Not Going to Take It Anymore</description> <lastBuildDate>Mon, 06 Feb 2012 20:04:22 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <cloud domain='dltj.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/us/</creativeCommons:license> <item><title>LANL Releases Open Source JPEG2000 Image Server</title><link>http://dltj.org/article/lanl-jpeg2000-image-server/</link> <comments>http://dltj.org/article/lanl-jpeg2000-image-server/#comments</comments> <pubDate>Tue, 16 Sep 2008 15:38:48 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[imaging]]></category> <category><![CDATA[java]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[Kakadu Software]]></category> <category><![CDATA[Los Alamos National Laboratory]]></category> <category><![CDATA[openurl]]></category><guid isPermaLink="false">http://dltj.org/?p=490</guid> <description><![CDATA[The lead article in the September/October issue of D-Lib Magazine release yesterday is on djatoka, the open source JPEG2000 Image Server from Los Alamos National Laboratory. The authors, Ryan Chute and Herbert Van de Sompel describe their effort in the &#8230; <a href="http://dltj.org/article/lanl-jpeg2000-image-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/?p=490"></abbr><p>The <a href="http://www.dlib.org/dlib/september08/chute/09chute.html" title="Introducing djatoka: A Reuse Friendly, Open Source JPEG 2000 Image Server">lead article</a> in the <a href="http://www.dlib.org/dlib/september08/09contents.html" title="D-Lib Magazine (September/October 2008)">September/October issue of D-Lib Magazine</a> release yesterday is on <a href="http://african.lanl.gov/aDORe/projects/djatoka/" title="aDORe djatoka Overview">djatoka</a>, the open source JPEG2000 Image Server from Los Alamos National Laboratory.  The authors, <a href="http://www.dlib.org/dlib/september08/authors/09authors.html#CHUTE" title="Ryan Chute&#039;s bio a D-Lib Magazine">Ryan Chute</a> and <a href="http://www.dlib.org/dlib/september08/authors/09authors.html#VANDESOMPEL" title="Herbert Van de Sompel&#039;s bio at D-Lib Magazine">Herbert Van de Sompel</a> describe their effort in the article abstract:<br /><blockquote>The ISO-standardized JPEG 2000 image format has started to attract significant attention. Support for the format is emerging in major consumer applications, and the cultural heritage community seriously considers it a viable format for digital preservation. So far, only commercial image servers with JPEG 2000 support have been available. They come with significant license fees and typically provide the customers with limited extensibility capabilities. Here, we introduce djatoka, an open source JPEG 2000 image server with an attractive basic feature set, and extensibility under control of the community of implementers. We describe djatoka, and point at demonstrations that feature digitized images of marvelous historical manuscripts from the collections of the British Library and the University of Ghent. We also call upon the community to engage in further development of djatoka.</p></blockquote><p><br />The article is very easy to read and is a great overview of how they built the djatoka image server.  LANL has a <a href="http://african.lanl.gov/adore-djatoka/" title="djatoja demonstration site">demonstration site</a> with images of the Magna Carta from the British Library.  The <a href="http://www.antifonarium-tsgrooten.be/highlights.htm" title="Universiteitsbibliotheek Gent | Antifonarium Tsgrooten">University of Ghent has also deployed a djatoka installation</a> with some digitized pages of a Gregorian choir book.  (The text of the site is in Dutch, I think, but you can click on the square boxes to the right of &#8220;Fol.&#8221; to bring up the images.)  LANL has also put together a screencast demonstration of djatoka, included below.</p><p>djatoka is available under the <a href="http://www.gnu.org/copyleft/lesser.html" title="About the GNU Lesser General Public License">GNU Lesser General Public License</a>.  The software has <a href="http://sourceforge.net/projects/djatoka" title="SourceForge.net: djatoka">a site on SourceForge</a> with forums for discussion.  It runs as a Java servlet, so it is pretty much cross-platform.  In the image server is the Kakadu JPEG2000 toolkit and the <a href="http://iipimage.sourceforge.net/" title="SourceForge.net: IIPImage">IIPImage JavaScript Viewer</a> toolkit.  One other key piece is a fascinating use of an <a href="http://en.wikipedia.org/wiki/OpenURL" title="OpenURL - Wikipedia">OpenURL</a> ContextObject to carry the service request information from the browser through the image server to the caching and rendering pieces.</p><p>Congratulations and kudos to Ryan, Herbert, and the team at LANL for putting together this great piece of software and releasing it as open source.<span class="Z3988" title="ctx_ver=Z39.88-2004&#038;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&#038;rft.jtitle=D-Lib+Magazine&#038;rft.id=info:DOI/10.1045%2Fseptember2008-chute&#038;rft.atitle=Introducing+djatoka%3A+A+Reuse+Friendly%2C+Open+Source+JPEG+2000+Image+Server&#038;rft.date=2008&#038;rft.volume=14&#038;rft.issue=9%2F10&#038;rft.spage=&#038;rft.epage=&#038;rft.artnum=http%3A%2F%2Fwww.dlib.org%2Fdlib%2Fseptember08%2Fchute%2F09chute.html&#038;rft.au=Ryan+Chute&#038;rft.au=Herbert+Van+de+Sompel&#038;bpr3.included=1&#038;bpr3.tags=Computer+Science%2CHuman-Computer+Interaction">Ryan Chute, Herbert Van de Sompel (2008). Introducing djatoka: A Reuse Friendly, Open Source JPEG 2000 Image Server <span style="font-style: italic;">D-Lib Magazine, 14</span> (9/10) DOI: <a rev="review" href="http://dx.doi.org/10.1045/september2008-chute" title="Handle Redirect">10.1045/september2008-chute</a></span></p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/lanl-jpeg2000-image-server/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Truly Lossless JPEG2000 Compression</title><link>http://dltj.org/article/lossless-jpeg2000/</link> <comments>http://dltj.org/article/lossless-jpeg2000/#comments</comments> <pubDate>Thu, 03 May 2007 14:15:01 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[imagemagick]]></category> <category><![CDATA[imaging]]></category> <category><![CDATA[jasper]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[Kakadu Software]]></category> <category><![CDATA[photoshop]]></category> <category><![CDATA[preservation]]></category><guid isPermaLink="false">http://dltj.org/2007/05/almost-lossless-jpeg2000/</guid> <description><![CDATA[This posting used to have the tag &#8220;&#8211; Except for Grayscale?&#8221; appended to the end of the title. That is no longer needed; see the bottom of the post for an explanation. We have been implementing University of Michigan&#8217;s DLXS &#8230; <a href="http://dltj.org/article/lossless-jpeg2000/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/05/almost-lossless-jpeg2000/"></abbr><p>This posting used to have the tag &#8220;&#8211; Except for Grayscale?&#8221; appended to the end of the title.  That is no longer needed; see the bottom of the post for an explanation.  We have been implementing University of Michigan&#8217;s DLXS software, and DLXS uses JPEG2000 for its image masters.  We have been investigating reports of perceived changes in images in the conversion from our old media server to DLXS, and along the way I discovered an important fact:  the default parameters for two popular JPEG2000 codecs results in an irreversible transformation.  Here is how to address that.</p><p><h2>Testing For Equivalence</h2><br />We performed four tests to determine whether the source image was equivalent to the converted image.  Three tests use Photoshop:</p><ul><li>On a pixel-by-pixel basis, at high magnification, we looked for differences in the RGB and CMYK values between the source TIFF and the converted JPEG2000 image.</li><li>Comparison by copying and pasting the JP2 on top of the TIF image and selecting &#8220;Difference&#8221; blending mode between the layers.  We then look at the histogram of the resulting image.  It should be all black, which shows as a black bar on the far left of the histogram view with the mean, median and standard deviation values all exactly 0.</li><li>Using &#8220;Images &gt; Calculations&#8230;&#8221; with 100% opacity difference blending between source images (the TIFF and the JP2) with the results put into a new document shows in a completely black image.  (This is likely equivalent to the test above, but we do it just to be sure).</li></ul><p>Another test uses <code>geoimgcmp</code>, which is <a href="http://homepage.mac.com/gregcoats/jp2.html" title="GeoJPEG2000 and JPEG2000 Info, by Greg Coats">part of GeoJasPer version</a> 1.3.2.  This command should return &#8220;0&#8243;:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">geoimgcmp <span style="color: #660033;">-f</span> source.tif <span style="color: #660033;">-F</span> destination.jp2 <span style="color: #660033;">-m</span> rmse</pre></div></div><p><h2>Jasper via ImageMagick</h2><br />The first thing we tried was <a href="http://www.ece.uvic.ca/~mdadams/jasper/" title="Jasper homepage">Jasper</a> 1.701 as compiled into <a href="http://www.imagemagick.org/" title="ImageMagick homepage">ImageMagick</a> 6.2.9.  The command looked something like this:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">convert source.tif <span style="color: #660033;">-o</span> destination.jp2</pre></div></div><p>I ran though the tests, though, and it would appear Jasper/ImageMagick is not using the reversible (integer) wavelet transform.</p><p><h2>Kakadu</h2><br />Next we tried <a href="http://www.kakadusoftware.com/" title="Kakadu Software homepage">Kakadu</a>.  Although it is commercial software, it is relatively inexpensive and we acquired a developer&#8217;s license for our work on the Ohio Digital Resource Commons.   A straight compress doesn&#8217;t get one a reversible transformation:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">kdu_compress <span style="color: #660033;">-i</span> source.tif <span style="color: #660033;">-o</span> destination.jp2</pre></div></div><p>A colleague did offer some help in the form of parameters that he uses to achieve truly lossless compression:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">kdu_compress <span style="color: #660033;">-i</span> source.tif <span style="color: #660033;">-o</span> destination.jp2 \
       <span style="color: #007800;">Creversible</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #660033;">-rate</span> -,<span style="color: #000000;">1</span>,<span style="color: #000000;">0.5</span>,<span style="color: #000000;">0.25</span> <span style="color: #007800;">Clevels</span>=<span style="color: #000000;">5</span></pre></div></div><p>The parameters mean this (from the Kakadu usage documentation):</p><dl><dt><code>Creversible=yes</code></dt><dd>Reversible compression?</dd><dt><code>-rate -,1,0.5,0.25</code></dt><dd>One or more bit-rates, expressed in terms of the ratio between the total number of compressed bits (including headers) and the product of the largest horizontal and  vertical image component dimensions.  A dash, &#8220;-&#8221;, may be used in place of the first bit-rate in the list to indicate that the final quality layer should include all compressed bits.  Specifying a very large rate target is fundamentally different to using the dash, &#8220;-&#8221;, because the former approach may cause the incremental rate allocator to discard terminal coding passes which do not lie on the rate-distortion convex hull.  This means that reversible compression might not yield a truly lossless representation if you specify `-rate&#8217; without a dash for the first rate target, no matter how large the largest rate target is.</dd><dt><code>Clevels=5</code></dt><dd>Number of wavelet decomposition levels, or stages.</dd></dl><p>Note that this implies this important default as well.</p><dl><dt><code>Corder=LRCP</code></dt><dd>Default progression order.  The four character identifiers have the following interpretation: L=layer; R=resolution; C=component; P=position. The first character in the identifier refers to the index which progresses most slowly, while the last refers to the index which progresses most quickly.</dd></dl><p><h2>Conclusions</h2></p><ol><li>Although one might expect the default options for image conversion programs to be lossless, ImageMagick&#8217;s &#8216;convert&#8217; and Kakadu&#8217;s &#8216;kdu_compress&#8217; commands do result in lossy transformations.</li><li>For our sample images, using the Kakadu command line options &#8220;<code>Creversible=yes -rate -,1,0.5,0.25 Clevels=5</code>&#8221; do appear to result in lossless transformations for source TIFF images.</li></ol><p>Thanks go out to Rob Buckley, Ron Murray, Kevin DeVorsey, Greg Coats, and David Taubman for their help in figuring this out.</p><p><h2>4-May-2007 Update</h2><br />There used to be a third conclusion above that said:  &#8220;For our sample greyscale images, we have not yet found a way to perform a lossless transformation to JPEG2000 when a downstream derivative is JPEG; there are perceptible differences between the JPEG created from the TIFF file versus the JPEG created from the losslessly compressed JPEG2000 file.&#8221; <a href="http://tech.groups.yahoo.com/group/kakadu_jpeg2000/message/4751" title="Message posted to the &#039;kakadu_jpeg2000&#039; mailing list">David Taubman&#8217;s message on the Kakadu mailing list</a> caused me to go back and look at this again.  I think I found an error in the way I was creating the test images.  With that fixed, I can show empirically that a JPEG derived from the lossless JP2 <em>is exactly the same</em> as the JPEG derived from the TIFF (when using identical parameters for the conversion).  That, along with the earlier finding that the TIFF and the JP2 are identical would seem to mean that the differences in the RGB/CMYK values displayed in Photoshop were a <a href="http://wordnetweb.princeton.edu/perl/webwn?o2=&amp;o0=1&amp;o7=&amp;o5=&amp;o1=1&amp;o6=&amp;o4=&amp;o3=&amp;s=red+herring&amp;i=1&amp;h=1000#c" title="Wordnet Entry for &#039;red herring&#039;">red herring</a>.</p><p>In response to the question of the lossy settings as a default, Dr. Taubman also notes &#8220;that quality is somewhat better (particularly at reduced resolutions) when viewing lossy compressed images using the irreversible options rather than the reversible.&#8221;  There are reasons for this, primarily due with what I understand as the elimination of image signal noise through through the act of lossly compression, but they are too complicated to address in this already-too-large correction text.<p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://wordnet.princeton.edu/perl/webwn?s=red+herring to http://wordnetweb.princeton.edu/perl/webwn?o2=&#038;o0=1&#038;o7=&#038;o5=&#038;o1=1&#038;o6=&#038;o4=&#038;o3=&#038;s=red+herring&#038;i=1&#038;h=1000#c on January 20th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/lossless-jpeg2000/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Following Up on Adobe Photoshop and JPEG2000</title><link>http://dltj.org/article/more-j2k-in-photoshop/</link> <comments>http://dltj.org/article/more-j2k-in-photoshop/#comments</comments> <pubDate>Wed, 25 Apr 2007 19:42:28 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[Kakadu Software]]></category> <category><![CDATA[photoshop]]></category> <category><![CDATA[preservation]]></category> <category><![CDATA[standards]]></category><guid isPermaLink="false">http://dltj.org/2007/04/more-j2k-in-photoshop/</guid> <description><![CDATA[The discussion has died down on Jack Nack&#8217;s blog posting about the future of JPEG2000 support in Photoshop. Since I last updated my own commentary on the issue, there have been a few more comments, including one by Erich Kesse &#8230; <a href="http://dltj.org/article/more-j2k-in-photoshop/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/04/more-j2k-in-photoshop/"></abbr><p>The discussion has died down on <a href="http://blogs.adobe.com/jnack/2007/04/jpeg_2000_do_yo.html" title="JPEG 2000 - Do you use it?&#039; blog posting in John Nack on Adobe">Jack Nack&#8217;s blog posting about the future of JPEG2000 support in Photoshop</a>.  Since I last updated <a href="http://dltj.org/2007/04/j2k-in-photoshop/">my own commentary on the issue</a>, there have been a few more comments, including <a href="http://blogs.adobe.com/jnack/2007/04/jpeg_2000_do_yo.html#c295786" title="Erich Kesse&#039;s comment on &#039;JPEG 2000 - Do you use it?&#039;">one by Erich Kesse from the University of Florida</a>.  Jack has added a few follow-ups to comments left on his blog, including this one at the bottom of Erich&#8217;s comment:</p><blockquote><p>[Thanks for the detailed feedback.  I would note that regardless of what Adobe does with JPEG 2000, other developers can create JPEG 2000 reading/writing plug-ins for the app.  --J.]</p></blockquote><p>A good point, but I think we&#8217;d all like to see Adobe remain committed to JPEG2000, and improve support for the image format across their entire product line.  There haven&#8217;t been any other public statements on Adobe&#8217;s part that I have seen.  If you run across one, let us know about it in the comments.</p><p>Update (20070515T1703):  has done exactly that with a <a href="http://www.fnordware.com/j2k/" title="j2k">free plugin download for Photoshop</a> that uses the <a href="http://www.kakadusoftware.com/" title="Kakadu Front Page">Kakadu engine</a>.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/more-j2k-in-photoshop/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>GSoC:  JPEG2000 JPIP Server and Viewer Applet</title><link>http://dltj.org/article/gsoc-jpip/</link> <comments>http://dltj.org/article/gsoc-jpip/#comments</comments> <pubDate>Tue, 03 Oct 2006 15:41:48 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Fedora]]></category> <category><![CDATA[Google Summer of Code]]></category> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[j2karclib]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[jpip]]></category> <category><![CDATA[Kakadu Software]]></category><guid isPermaLink="false">http://dltj.org/2006/10/gsoc-jpip/</guid> <description><![CDATA[OhioLINK was excited and privileged to participate in the second annual Google Summer of Code &#8212; a program to inspire young developers and provide students in Computer Science and related fields the opportunity to do work related to their academic &#8230; <a href="http://dltj.org/article/gsoc-jpip/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/10/gsoc-jpip/"></abbr><p>OhioLINK was excited and privileged to participate in the second annual <a href="http://code.google.com/soc/" title="Google Summer of Code homepage">Google Summer of Code</a> &#8212; a program to inspire young developers and provide students in Computer Science and related fields the opportunity to do work related to their academic pursuits during the summer, and to support existing open source projects and organizations.  This is the first of three posts summarizing the efforts of three students; this one details the work of <strong>Juan Pablo Garcia Ortiz</strong>, a Ph.D. candidate at the University of Almeria in Spain, to build a <strong>JPEG2000 JPIP Streaming Server and Client Browser Viewer Applet</strong>.  This is an edited version of his final report.</p><p>The final applications are the &#8216;<span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/jpip_server/">jpip_server</span>&#8216; and the &#8216;<span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/J2KViewer/">J2KViewer</span>&#8216; &mdash; both of which can be found in the <a href="https://drc-dev.ohiolink.edu/svn/" title="OhioLINK DRC Subversion Repository URI">OhioLINK subversion repository</a>.  Please note that both are built atop the <a href="http://www.kakadusoftware.com/" title="Kakadu Softwarehomepage">Kakadu JPEG2000 code library</a>, only a portion of which is included in the OhioLINK subversion repository. <sup><a href="http://dltj.org/article/gsoc-jpip/#footnote_0_129" id="identifier_0_129" class="footnote-link footnote-identifier-link" title="Editorial comment:  although not released with an open source license, the Kakadu JPEG2000 code library is available at a very reasonable cost.  Juan Pablo&amp;#8217;s efforts initially started with one of the open source JPEG2000 libraries, but it was quickly determined that the Kakadu library was required to meet the demands of the project proposal.">1</a></sup></p><p><h2>JPIP Streaming Server</h2><br />The JPIP Streaming Sever was not the primary focus of Juan Pablo&#8217;s efforts, but it was required in order to achieve the primary objective.  It is a very simple implementation, supporting only HTTP channels with JPP streams.   The server is multi-threaded and supports channel reconnection. Only a reduced set of JPIP parameters are supported &mdash; the ones necessary for the implementation of the Java JPIP client.  (In Juan Pablo&#8217;s opinion, the simple image browser client he was developing did not require additional functionality at the server end.)</p><p>The multi-threaded mechanism is implemented with the Linux &#8216;pthread&#8217; library and uses one thread for each client socket.  The source code is written in C++, using the STL library to simplify the code, making it more legible, and orienting it to the object oriented programming philisophy.  The different modules of the program are:</p><ul><li><strong>report.cpp</strong> (report.h): For the class &#8216;report&#8217;, used to generate the applications logs.</li><li><strong>sock.cpp</strong> (sock.h): For the class &#8216;sock&#8217;, used to simplify the sockets work in Linux.</li><li><strong>j2k.cpp</strong> (j2k.h): Contains the class &#8216;j2k_image_file&#8217;, used to abstract the work with J2K images. It also contains the necessary code to initialize the Kakadu message handling system.</li><li><strong>jpip.cpp</strong> (jpip.h): Contains several classes to support a basic version of the JPIP protocol, over the Kakadu library.</li><li><strong>jpip_server.cpp</strong>: The main module.</li></ul><p>It is recommended to start from a freshly unpacked (but not yet build) version of the Kakadu library source code (version 5.1).  To build this JPIP, follow these steps:</p><ol><li>At the top level of the Kakadu source directory, checkout the &#8216;jpip_server&#8217; directory from the OhioLINK Subversion respository.  The Subversion URI is https://drc-dev.ohiolink.edu/svn/jpip_server/</li><li>Change the current directory into &#8216;jpip_server&#8217; and call the script &#8216;<span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/jpip_server/kakadu_rebuild">kakadu_rebuild</span>&#8216;. The script will create the Kakadu directory structure, apply some necessary patches, and build the Kakadu libraries.  Please note that this script was written for Kakadu version 5.1 and the patches may not be required in subsequent versions.</li><li>Run &#8216;make&#8217; (inside the jpip_server directory)</li></ol><p>The accepted parameters by the server can be seen executing &#8216;jpip_server -u&#8217;. The images served by the server must be, by default, in the same directory. The command line option &#8216;-ipath&#8217; allows you to define a base path for all the requested images.  This server can be tested with the &#8216;kdu_show&#8217; application of the Kakadu package.  (kdu_show is a Windows application, but can be executed in Linux with WINE without problems.)</p><p><h2>JPIP Browser Applet</h2><br />The second application is a JPIP Java viewer, implemented as an applet.  It requires the Kakadu JNI library; the portions of the Kakadu JNI library for Windows and Linux required to implement the JPIP applet are included in the source code repository.  To build the JPIP Java viewer, follow these steps:</p><ol><li>Checkout of the &#8216;J2KViewer&#8217; directory from the OhioLINK Subversion respository.  The Subversion URI is https://drc-dev.ohiolink.edu/svn/J2KViewer/.</li><li>From within the J2KViewer directory, run &#8216;make&#8217;.</li></ol><p>The build process creates a JAR file containing the viewer applet. It&#8217;s correct use would be to sign it with a official signature and include it into the appropriate Web page as an applet. The applet accepts the following parameters:</p><ul><li>&#8220;<strong>Image</strong>&#8220;: required, specifies the JPEG2000 image to view. If it&#8217;s a local image (not typical), this would be a path name (for example &#8216;<code>/home/jportiz/image.jp2</code>&#8216;). If it&#8217;s a remote image (the typical usage) through the JPIP server, it would be a JPIP URI (for example, &#8216;<code>jpip://server:9000/image.jp2</code>&#8216;). Do not include any JPIP parameters in this URI.</li><li>&#8220;<strong>MiniViewWidth</strong>&#8220;: optional, specifies the width, in pixels, of the mini-view.</li><li>&#8220;<strong>MiniViewHeight</strong>&#8220;: optional, specifies the height, in pixels, of the mini-view. The final mini-view size will be the maximum multiple by 2 size of the image that can be included within the specified mini-view size. By default, the mini-view size is 250&#215;250.</li></ul><p>To be able to test easily the applet, you can run &#8216;<code>make test</code>&#8216; to create a &#8216;test.html&#8217; file and a &#8216;test&#8217; script. This script launches the applet viewer with the &#8216;test.html&#8217; page. It is necessary to modify the &#8216;Image&#8217; parameter of this HTML page to set the appropriate image location.</p><p>To test the applet within a web browser, you can run &#8216;<code>make test-signed</code>&#8216; to create a signed JAR file, then open &#8216;test-signed.html&#8217; with a Java compatible browser.  Before opening the HTML page,  it is necessary to modify the &#8216;Image&#8217; parameter within the page to set the appropriate image location.</p><p>The viewer has a simple UI. It has a toolbar with two buttons, one to select the interaction mode (zoom or pan) and another one to show the mini-view window. There is a status bar where is showed the real image<br />size and the current scale, and in the right side, the current number of bytes read. In the center panel is the image &mdash; initially scaled by 2 fo fit it in the applet size. This behaviour can be modified easily in the code.</p><p>The mini-view window can be moved to any part of the main window. If it&#8217;s closed, it can be showed again with the associated button of the toolbar.  The mini-view contains a red rectangle outlining the actual view of the main window. This red rectangle can be moved by dragging it and the corresponding view in the main window will be updated.</p><p>The applet requires that the Kakadu JNI library is stored in the user home directory (&#8216;C:\Document And Settings\User&#8217; in Windows and &#8216;/home/user&#8217; in Linux). The applet detects if this library exists and if it is not found the applet allows it to be download automatically from the OhioLINK repository and stored it in the user home directory.</p><p>This is a brief description of the implemented classes:</p><ul><li><strong>ChunkedInputStream</strong>: An InputStream derived class to decode HTTP chunked messages.</li><li><strong>HTTPMessage</strong>: The base class of all the HTTP message classes.</li><li><strong>HTTPRequest</strong>: Identifies a HTTP request.</li><li><strong>HTTPResponse</strong>: Identifies a HTTP response.</li><li><strong>HTTPSocket</strong>: Derives from Socket and allows HTTP messages to be sent and received in an easy way. In only supports send HTTP requests and receive HTTP responses (a client socket).</li><li><strong>ImagePanel</strong>: A GUI panel that can be included in any image browser.  This panel has the necessary methods to load images and control its visualization. It supports the display of a mini-view of the image. All of the image navigation is controlled directly within this panel.</li><li><strong>ImageWindow</strong>: An interface to implement all the parent windows that include an ImagePanel obejct.</li><li><strong>J2KCache</strong>: A wrapper class for the Kdu_cache Kakadu class. This encapsulation allows another J2K engine to be used while avoiding the need to modify the design and code of the applet.</li><li><strong>J2KEngine</strong>: Contains all the necessary code to initialize the J2K engine.  In our case,	the Kakadu J2K engine.</li><li><strong>J2KException</strong>: A Exception derived class to identify the exceptions generated by the J2K code.</li><li><strong>J2KImage</strong>: This class contains all the necessary code to work with J2K images, local files as well as remote URIs. If the image is local, the Kakadu library	functions are used to open it. If the image is remote, a J2KReader object is used to retreive the content.</li><li><strong>J2KImageView</strong>: Defines an image view, renderable on the screen. This image view is defined by its coordenates, size and resolution level.</li><li><strong>J2KReader</strong>: An implementation of a basic JPIP client to read the necessary data of a specific image view.</li><li><strong>J2KRender</strong>: Implements the rendering thread of the image browser. This thread is always generating the current image view. It stops when this view is rendered and the image content is completed (if the image is remote, this means that all of the required image codestream blocks have been received).</li><li><strong>J2KViewer</strong>: The main class of the application.</li><li><strong>JpipConstants</strong>: Defines several global constants related to the JPIP protocol.</li><li><strong>JpipDataInputStream</strong>: An InputStream-derived class to extract JPIP data segments from an	input.</li><li><strong>JpipDataSegment</strong>: Contains the information of a JPIP data segment, which can be either an EOR message or a data-bin segment.</li><li><strong>Mutex</strong>: A simple mutex implementation in Java, used to avoid threads conflicts when accessing to the image data.</li><li><strong>StringInputStream</strong>: An InputStream-derived class to extract strings from inputs without buffering. Useful to decode HTTP headers and chunks lengths.</li></ul><p>The viewer follows the JPIP philosophy in the code structure, especially with remote images.  That is, when it is displaying a remote image, there are three threads running in parallel: one for the main GUI, a second for the JPIP comunication that is making the requests and filling the cache with the received data, and a third to render the cache content on the user&#8217;s display.</p><p>The Java JPIP viewer has been tested in Windows and in Linux. In Windows it has been used the Sun JVM/JRE 1.5 without problems. However, in Linux, this JVM/JRE version seems quite unstable, requiring the previous version, 1.4.2.  In Linux the Blackdown JVM 1.4.2 as well as the Sun JVM 1.4.2 have been tested with succesful results.</p><p><h2>Future Development Goals</h2><br />The most important feature to include, in Juan Pablo&#8217;s opinion as well as my own, is to make the client applet independent of the Kakadu library; that is, to use an open source J2K engine.  Juan Pablo is currently collaborating a bit with the <a href="http://en.wikipedia.org/wiki/HiRISE" title="">HiRISE project</a> in order to implement a pure Java JPIP code.  It needs to use an efficient pure Java J2K engine. They are currently modifing the JJ2000 code in order to improve it and adapt it within the JPIP client. When this goal was reached, it should be included into the current J2KViewer implementation.</p><p>Another feature that was part of the original design but was not completed due to time pressures was to integrate the JPIP server and client into the <a href="http://www.fedora.info/" title="FEDORA digital object repository homepage">FEDORA digital object repository</a> system.  There is also room for a lot of more features: support of the HTTP-TCPtransport protocol, allow for the display of the image metadata, more GUI utilities like the ability to save the image as a local file for image processing, increase the set of supported JPIP parameters, etc.</p><p><h2>Gratitude and Acknowledgements</h2><br />OhioLINK offers its congratulations to Juan Pablo for successfully completing the Google Summer of Code project and we look forward to working with him to continue the development effort.  We anticipate integrating his work into the <a href="http://info.drc.ohiolink.edu/" title="Ohio Digital Resource Commons homepage | Save, Discover, and Share Your Resources and the Resources of the World">Ohio Digital Resource Commons Project</a> in the coming year.  We also offer our gratitude to Google for not only their financial support of the Summer of Code program but also for the efforts of Chris, Greg, Leslie and countless other Google staff members in supporting the logistics of this world-wide effort.  I would also like to thank Ron Murray and others at the Preservation Reformatting Division of the Library of Congress for helping think through the requirements and their general support for the effort to bring JPEG2000 to the world of archives and libraries.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/jpip_server/ on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/J2KViewer/ on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/jpip_server/kakadu_rebuild on January 13th, 2011.</p><h2>Footnotes</h2><ol class="footnotes"><li id="footnote_0_129" class="footnote">Editorial comment:  although not released with an open source license, the Kakadu JPEG2000 code library is available at a very reasonable cost.  Juan Pablo&#8217;s efforts initially started with one of the open source JPEG2000 libraries, but it was quickly determined that the Kakadu library was required to meet the demands of the project proposal.</li></ol><div class='series_links'></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/gsoc-jpip/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> </channel> </rss>
<!-- Served from: dltj.org @ 2012-02-11 12:39:05 by W3 Total Cache -->
