2016-08-23 1 views
-1

Hallo Ich konnte eine tif-Datei konvertieren mit dem folgenden Code JPEG, die ich vonMehr pag tif auf mehr JPEG-Dateien (Java)

bekam https://stackoverflow.com/questions/15429011/how-to-convert-tiff-to-jpeg-png-in-java#=

String inPath = "./tifTest/113873996.002.tif"; 
String otPath = "./tifTest/113873996.002-0.jpeg"; 

BufferedInputStream input = null; 
BufferedOutputStream output = null; 
try { 
    input = new BufferedInputStream(new FileInputStream(inPath), DEFAULT_BUFFER_SIZE); 
    output = new BufferedOutputStream(new FileOutputStream(otPath), DEFAULT_BUFFER_SIZE); 

    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    int length; 
    while ((length = input.read(buffer)) > 0) { 
     output.write(buffer, 0, length); 
    } 

} catch (FileNotFoundException ex) { 
    Logger.getLogger(TifToJpeg.class.getName()).log(Level.SEVERE, null, ex); 
} catch (IOException ex) { 
    Logger.getLogger(TifToJpeg.class.getName()).log(Level.SEVERE, null, ex); 
} finally { 
    try { 
     output.flush(); 
     output.close(); 
     input.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Dies funktioniert nur mit einem -page TIF-Datei, und wenn ich es mit einem mehrseitigen TIF verwenden, speichert es nur die erste Seite.

Wie kann ich verändert dies eine mymultipagetif.tif in sparen:

  • mymultipagetif-0.jpeg
  • mymultipagetif-1.jpeg
  • mymultipagetif-2.jpeg

Vielen Dank!

+1

Wissen Sie, dass Sie Ihren Code von der verknüpften Frage und nicht von einer seiner Antworten erhalten haben? Der betreffende Code ist lachhaft, er liest aus einer Datei und schreibt ohne Transformation zurück zum anderen, nur um die Erweiterung der Datei zu ändern ... Sie müssen natürlich keine Lektion von einem Fremden im Netz nehmen, Aber Code lesen statt kopieren/einfügen wäre ein guter erster Schritt, um in der Entwicklung besser zu werden. – Aaron

Antwort

0

Dies erfordert eine mehrseitige TIFF-Datei (im SeekableStream), extrahieren Sie die Seiten im Seiten-Array ("1", "3", "4" zum Beispiel) und schreiben Sie sie in eine einzige mehrseitige Seite Tiff in die Datei outTiffFileName. Ändern Sie wie gewünscht.

private String _ExtractListOfPages (SeekableStream ss, String outTiffFileName, String[] pages){ 
    // pageNums is a String array of 0-based page numbers. 
    try { 
     TIFFDirectory td = new TIFFDirectory(ss, 0); 
     if (debugOn) { 
      System.out.println("Directory has " + Integer.toString(td.getNumEntries()) + " entries"); 
      System.out.println("Getting TIFFFields"); 
      System.out.println("X resolution = " + Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_X_RESOLUTION))); 
      System.out.println("Y resolution = " + Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_Y_RESOLUTION))); 
      System.out.println("Resolution unit = " + Long.toString(td.getFieldAsLong(TIFFImageDecoder.TIFF_RESOLUTION_UNIT))); 
      } 
     ImageDecoder decodedImage = ImageCodec.createImageDecoder("tiff", ss, null); 
     int count = decodedImage.getNumPages(); 
     if (debugOn) { System.out.println("Input image has " + count + " page(s)"); } 
     TIFFEncodeParam param = new TIFFEncodeParam(); 
     TIFFField tf = td.getField(259); // Compression as specified in the input file 
     param.setCompression(tf.getAsInt(0)); // Set the compression of the output to be the same. 
     param.setLittleEndian(false); // Intel 
     param.setExtraFields(td.getFields()); 
     FileOutputStream fOut = new FileOutputStream(outTiffFileName); 
     Vector<RenderedImage> vector = new Vector<RenderedImage>(); 
     RenderedImage page0 = decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0])); 
     BufferedImage img0 = new BufferedImage(page0.getColorModel(), (WritableRaster)page0.getData(), false, null); 
     int pgNum; 
// Adding the extra pages starts with the second one on the list. 
     for (int i = 1; i < pages.length; i++) { 
      pgNum = Integer.parseInt(pages[i]); 
      if (debugOn) { System.out.println ("Page number " + pgNum); } 
      RenderedImage page = decodedImage.decodeAsRenderedImage(pgNum); 
      if (debugOn) { System.out.println ("Page is " + Integer.toString(page.getWidth()) + " pixels wide and "+ Integer.toString(page.getHeight()) + " pixels high."); } 
      if (debugOn) { System.out.println("Adding page " + pages[i] + " to vector"); } 
      vector.add(page); 
     } 
     param.setExtraImages(vector.iterator()); 
     ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", fOut, param); 
     if (debugOn) { System.out.println("Encoding page " + pages[0]); } 
     encoder.encode(decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0]))); 
     fOut.close(); 
    } catch (Exception e) { 
     System.out.println(e.toString()); 
     return("Not OK " + e.getMessage()); 
    } 
    return ("OK"); 
}