2016-08-23 14 views
-1

こんにちは、私はこれは一つだけで動作しますマルチPAGのTIF

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(); 
    } 
} 

からもらった次のコードでJPEGするTIFファイルを変換することができました-page tifファイルを作成し、複数ページのtifファイルで使用すると、最初のページのみが保存されます。

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

はどのようにmymultipagetif.tifを保存するために、これを変更することができますありがとう!

+1

あなたのコードは、その回答の1つではなくリンクされた質問から得られたと思いますか?問題のコードは面白いです、ファイルから読み込んで、変換せずにもう一方に書き戻します。ファイルの拡張子を変更するだけです...ネット上の見知らぬ人からレッスンを受ける必要はありませんが、コードをコピー/貼り付けるのではなく読み上げることは、開発にもっと堪能になるための最初のステップになるでしょう。 – Aaron

答えて

0

これは、(SeekableStream内の)複数ページのTIFFファイルを取り、ページ配列( "1"、 "3"、 "4"など)のページを抽出し、それらを1つのマルチページtiffをファイルoutTffFileNameに追加します。必要に応じて変更します。

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"); 
} 
関連する問題