2008-11-11 15 views
5

Bir png'yi tiff'e dönüştürme sorunları yaşıyorum. Dönüşüm iyi gidiyor, ancak görüntü çok büyük. Sorun şu ki, sıkıştırma işlemini doğru şekilde yapmıyorum? Herhangi birinin önerisi varmı?? İşte Java ImageIO kullanarak Tiff sıkıştırma

kod örneği

public static void test() throws IOException { 

    // String fileName = "4958813_1"; 
    String fileName = "4848970_1"; 
    String inFileType = ".PNG"; 
    String outFileType = ".TIFF"; 

    ImageIO.scanForPlugins(); 

    File fInputFile = new File("I:/HPF/UU/" + fileName + inFileType); 
    InputStream fis = new BufferedInputStream(new FileInputStream(
      fInputFile)); 
    PNGImageReaderSpi spi = new PNGImageReaderSpi(); 
    ImageReader reader = spi.createReaderInstance(); 

    ImageInputStream iis = ImageIO.createImageInputStream(fis); 
    reader.setInput(iis, true); 
    BufferedImage bi = reader.read(0); 

    TIFFImageWriterSpi tiffspi = new TIFFImageWriterSpi(); 
    ImageWriter writer = tiffspi.createWriterInstance(); 
    //Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("TIFF"); 
    //ImageWriter writer = iter.next(); 

    ImageWriteParam param = writer.getDefaultWriteParam(); 
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 

    param.setCompressionType("LZW"); 
    param.setCompressionQuality(0.5f); 
    File fOutputFile = new File("I:\\HPF\\UU\\" + fileName + outFileType); 
    ImageOutputStream ios = ImageIO.createImageOutputStream(fOutputFile); 
    writer.setOutput(ios); 
    writer.write(bi); 

} 

cevap

9

Writer.getDefaultWriteParam() yalnızca bir ImageWriteParam nesnesi oluşturur, başka bir şeyle ilişkilendirmez.

Kodunuzda, daha sonra ImageWriter'da kullanılmak üzere değiştirilmiş param nesnesine ilişkin herhangi bir mekanizma göremiyorum.

writer.write(bi); 

Kullanmak gerekir::

ben yerine inanıyoruz

writer.write(null, new IIOImage(bi, null, null), param); 
3

Java IO bilmiyorum, ama genelde bunun yerine LZW'nin JPEG sıkıştırmasını kullanabilir miyim birkaç şey

  1. bakmak ister?
  2. TIFF şerit boyutunun nasıl ayarlanacağına bakın - küçük boyut istediğiniz gibi değilse, görüntünün yüksekliğine ayarlayın.

Düzenleme: Bir TiffWriteParam aşağıdaki yöntemleri

tiffWriteParam.setTilingMode(ImageWriteParam.MODE_EXPLICIT); 
tiffWriteParam.setTiling(imageWidth, imageHeight, 0, 0); 

imageWidth ve imageHeight görselinizin boyuta vars set varmış gibi görünüyor. Olumsuz olan, görüntünün bölgelerini okumak daha yavaş olacaktır.