2011-07-29 24 views
0

我需要使用无损jpeg操作(即在jpegtran中裁剪)从大JPEG图像中创建具有JPEG压缩图块的平铺金字塔TIFF文件。是否有任何工具或Java代码执行此类操作?如何以无损方式从JPEG图像创建金字塔平铺TIFF

目前我使用我的Java代码来创建瓷砖金字塔TIFF,但这样做有损方式:

public static void writeTiff(RenderedOp src, File dstFile, float jpegQuality, int tileSize, int pyramid, String interpolation) throws IOException { 
    dstFile.getParentFile().mkdirs(); 
    TIFFImageWriterSpi imageWriterSpi = new TIFFImageWriterSpi(); 
    TIFFImageWriter imageWriter = (TIFFImageWriter)imageWriterSpi.createWriterInstance(); 
    ImageOutputStream out = new FileImageOutputStream(dstFile); 
    try { 
     imageWriter.setOutput(out); 
     imageWriter.prepareWriteSequence(null); 
     BufferedImage img = null; 
     for(int i=0; i<pyramid; i++) { 
      img = img==null ? src.getAsBufferedImage() : JAIUtils.scale(img, 0.5F, interpolation).getAsBufferedImage(); 
      TIFFImageWriteParam imageWriteParam = (TIFFImageWriteParam)imageWriter.getDefaultWriteParam(); 
      if (tileSize>0 && (img.getWidth()>tileSize || img.getHeight()>tileSize)) { 
       imageWriteParam.setTilingMode(ImageWriteParam.MODE_EXPLICIT); 
       imageWriteParam.setTiling(tileSize, tileSize, 0, 0); 
      } 
      if (jpegQuality > 0) { 
       imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
       imageWriteParam.setCompressionType("JPEG"); 
       imageWriteParam.setCompressionQuality(jpegQuality); 
      } 
      imageWriter.writeToSequence(new IIOImage(img, null, null), imageWriteParam); 
     } 
     imageWriter.endWriteSequence(); 
    } finally { 
     out.close(); 
    } 
} 

回答