2015-04-06 31 views
0

我試圖保存通過瀏覽器使用Spring和JAI ImageIO上傳的tiff圖像。我可以使用下面的代碼保存圖像,但問題是保存的圖像沒有上傳之前所具有的圖層(tiff圖像組成的圖層)。保存多層TIFF圖像而不丟失Java中的圖層信息

是否有任何其他參數可確保保存的圖像也具有圖層?

private void saveTiffImage(byte[] bytes, String uuid) throws Exception { 
    SeekableStream stream = new ByteArraySeekableStream(bytes); 

    String[] names = ImageCodec.getDecoderNames(stream); 
    ImageDecoder dec = 
      ImageCodec.createImageDecoder(names[0], stream, null); 
    RenderedImage im = dec.decodeAsRenderedImage(); 

    String fileName = uuid + ".tif"; 

    com.sun.media.jai.codec.TIFFEncodeParam params = new com.sun.media.jai.codec.TIFFEncodeParam(); 
    params.setCompression(com.sun.media.jai.codec.TIFFEncodeParam.COMPRESSION_PACKBITS); 

    FileOutputStream os = new FileOutputStream(IMG_LOCATION + fileName); 

    javax.media.jai.JAI.create("filestore", im, IMG_LOCATION + fileName, "TIFF", params); 

    os.flush(); 
    os.close(); 
} 

回答

0

我在這裏找到了使用答案的解決方案:How to combine two or many tiff image files in to one multipage tiff image in JAVA

private Object[] saveTiffImage(byte[] bytes, String uuid) throws Exception { 
    SeekableStream stream = new ByteArraySeekableStream(bytes); 

    String[] names = ImageCodec.getDecoderNames(stream); 
    ImageDecoder dec = 
      ImageCodec.createImageDecoder(names[0], stream, null); 

    // Here we get the other pages. 
    Vector vector = new Vector(); 
    int pageCount = dec.getNumPages(); 
    for (int i = 1; i < pageCount; i++) { 
     RenderedImage im = dec.decodeAsRenderedImage(i); 
     vector.add(im); 
    } 

    String fileName = uuid + ".tif"; 

    com.sun.media.jai.codec.TIFFEncodeParam params = new com.sun.media.jai.codec.TIFFEncodeParam(); 
    params.setCompression(com.sun.media.jai.codec.TIFFEncodeParam.COMPRESSION_PACKBITS); 
    // Then set here 
    params.setExtraImages(vector.iterator()); 

    // This is the first page 
    RenderedImage im = dec.decodeAsRenderedImage(0); 

    FileOutputStream os = new FileOutputStream(IMG_LOCATION + fileName); 

    javax.media.jai.JAI.create("filestore", im, IMG_LOCATION + fileName, "TIFF", params); 

    os.flush(); 
    os.close(); 
}