2008-11-11 17 views
5

मुझे एक पीएनजी को टिफ में बदलने में समस्याएं आ रही हैं। रूपांतरण ठीक हो जाता है, लेकिन छवि बहुत बड़ी है। मुझे लगता है कि मुद्दा यह है कि मैं संपीड़न सही ढंग से नहीं कर रहा हूं? किसी के पास कोई सुझाव है ??जावा छवि का उपयोग कर टिफ संपीड़न

यहाँ कोड नमूना

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

} 

उत्तर

9

Writer.getDefaultWriteParam() केवल ImageWriteParam ऑब्जेक्ट बनाता है, यह इसे किसी और चीज़ से वापस लिंक नहीं करता है।

मुझे आपके संशोधित param ऑब्जेक्ट के लिए आपके कोड में कोई भी तंत्र दिखाई नहीं देता है जिसे बाद में ImageWriter में उपयोग किया जा सकता है।

मुझे विश्वास है कि बजाय:

writer.write(bi); 

आप उपयोग करने की आवश्यकता:

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

मैं जावा आईओ पता नहीं है है, लेकिन आम तौर पर आप कुछ चीजें

  1. को देखने के लिए आप LZW के बजाय JPEG संपीड़न का उपयोग कर सकते हैं?
  2. देखें कि टीआईएफएफ स्ट्रिप आकार कैसे सेट करें - यदि छोटा आकार आप चाहते हैं, तो इसे छवि की ऊंचाई पर सेट करें।

संपादित करें: ऐसा लगता है कि एक TiffWriteParam तरह निम्न विधियों

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

सेट imageWidth और imageHeight अपनी छवि के आकार के हिसाब वार्स है। नकारात्मकता यह है कि यह छवि के क्षेत्रों को पढ़ने के लिए धीमा हो जाएगा।