Changeset 4258


Ignore:
Timestamp:
07/25/08 16:46:55 (11 years ago)
Author:
melissa
Message:

Use JMagick to decompress JPEG-2000 data if JAI fails.

Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/build.properties

    r4184 r4258  
    3333           jar/testng-5.7-jdk14.jar:\ 
    3434           jar/velocity-dep-1.5.jar:\ 
    35            jar/visad-lite.jar 
     35           jar/visad-lite.jar:\ 
     36           jar/jmagick.jar 
    3637 
    3738# files requiring Java 1.5 (rather than Java 1.4) 
     
    7475                  mdbtools-java.jar \ 
    7576                  poi-loci.jar \ 
     77                  jmagick.jar \ 
    7678                  QTJava.zip 
    7779 
  • trunk/build.xml

    r4125 r4258  
    2626                   jbossall-client.jar (reflected) 
    2727                   poi-loci.jar (reflected) 
     28                   jmagick.jar (reflected) 
    2829                   slf4j-jdk14.jar (reflected) 
    2930    Targets:       style-formats 
     
    5556                   jbossall-client.jar (bio-formats.jar) 
    5657                   poi-loci.jar (bio-formats.jar) 
     58                   jmagick.jar (bio-formats.jar) 
    5759                   slf4j-jdk14.jar (bio-formats.jar) 
    5860                   visad-lite.jar 
     
    9395                   jbossall-client.jar (bio-formats.jar) 
    9496                   poi-loci.jar (bio-formats.jar) 
     97                   jmagick.jar (bio-formats.jar) 
    9598                   slf4j-jdk14.jar (bio-formats.jar) 
    9699                   xmlrpc-1.2-b1.jar (ome-java.jar) 
     
    120123                   jbossall-client.jar (bio-formats.jar) 
    121124                   poi-loci.jar (bio-formats.jar) 
     125                   jmagick.jar (bio-formats.jar) 
    122126                   slf4j-jdk14.jar (bio-formats.jar) 
    123127                   xmlrpc-1.2-b1.jar (ome-java.jar) 
     
    168172                   ome-java.jar 
    169173                   poi-loci.jar (bio-formats.jar) 
     174                   jmagick.jar (bio-formats.jar) 
    170175                   slf4j-jdk14.jar (bio-formats.jar) 
    171176                   xmlrpc-1.2-b1.jar (ome-java.jar) 
     
    335340    Notes:     required for OME-Java to communicate with OME servers 
    336341    License:   Apache 
     342 
     343JMagick 
     344    JAR file:  jmagick.jar 
     345    URL:       http://www.jmagick.org 
     346    Notes:     required for JPEG-2000 support in Aperio SVS 
     347    License:   LGPL 
    337348--> 
    338349 
  • trunk/loci/formats/codec/JPEG2000Codec.java

    r4139 r4258  
    2424package loci.formats.codec; 
    2525 
     26import java.awt.Image; 
    2627import java.awt.image.BufferedImage; 
    2728import java.io.*; 
     
    152153    byte[][] single = null, half = null; 
    153154    BufferedImage b = null; 
     155    Exception exception = null; 
     156    long fp = in.getFilePointer(); 
    154157    try { 
    155158      if (maxFP == 0) maxFP = in.length(); 
    156       byte[] buf = new byte[(int) (maxFP - in.getFilePointer())]; 
     159      byte[] buf = new byte[(int) (maxFP - fp)]; 
    157160      in.read(buf); 
    158  
    159       /* 
    160       // HACK 
    161       for (int i=0; i<buf.length-1; i++) { 
    162         if (buf[i] == (byte) 0xff && buf[i + 1] == 0x51) { 
    163           int ch = DataTools.bytesToInt(buf, i + 38, 2, false); 
    164           for (int c=0; c<ch; c++) { 
    165             buf[i + 41 + c*3] = (byte) 1; 
    166           } 
    167  
    168           break; 
    169         } 
    170       } 
    171       */ 
    172161 
    173162      ByteArrayInputStream bis = new ByteArrayInputStream(buf); 
     
    186175    } 
    187176    catch (ReflectException exc) { 
    188       throw new FormatException(exc); 
     177      exception = exc; 
    189178    } 
    190179    catch (IOException exc) { 
    191       throw new FormatException(exc); 
     180      exception = exc; 
     181    } 
     182 
     183    if (exception != null) { 
     184      // decoding may have failed if this is a more exotic flavor of JP2K 
     185      // we will now try to use JMagick (Java wrappers for ImageMagick) 
     186 
     187      try { 
     188        in.seek(fp); 
     189        if (maxFP == 0) maxFP = in.length(); 
     190        byte[] buf = new byte[(int) (maxFP - fp)]; 
     191        in.read(buf); 
     192 
     193        // modified from code contributed by Toby Cornish 
     194        ReflectedUniverse jmagick = new ReflectedUniverse(); 
     195        jmagick.exec("import magick.util.MagickCanvas"); 
     196        jmagick.exec("import magick.MagickImage"); 
     197        jmagick.exec("import magick.ColorspaceType"); 
     198        jmagick.exec("import magick.MagickProducer"); 
     199        jmagick.exec("import magick.ImageInfo"); 
     200 
     201        jmagick.setVar("buf", buf); 
     202        jmagick.exec("info = new ImageInfo()"); 
     203        jmagick.exec("image = new MagickImage(info, buf)"); 
     204        jmagick.exec("image.transformRgbImage(ColorspaceType.YCbCrColorspace)"); 
     205        jmagick.exec("canvas = new MagickCanvas()"); 
     206        jmagick.exec("producer = new MagickProducer(image)"); 
     207        Image img = (Image) jmagick.exec("canvas.createImage(producer)"); 
     208        b = ImageTools.makeBuffered(img); 
     209        // don't use getPixelBytes, because JMagick always gives us 
     210        // 32 bits per channel 
     211        single = ImageTools.getBytes(b); 
     212      } 
     213      catch (ReflectException exc) { 
     214        throw new FormatException(exc); 
     215      } 
     216      catch (IOException exc) { 
     217        throw new FormatException(exc); 
     218      } 
    192219    } 
    193220 
Note: See TracChangeset for help on using the changeset viewer.