I am having issues converting a png to tiff. The conversion goes fine, but the image is huge. I think the issue is that I am not doing the compression correctly? Anyone have any suggestions??
Here is the code sample
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);
}
I don't know Java IO, but generally you want to look at a few things
Edit: Looks like a TiffWriteParam has the following methods
set the imageWidth and imageHeight vars to your image's size. The downside is that it will be slower to read out regions of the image.
Writer.getDefaultWriteParam()
only creates anImageWriteParam
object, it doesn't link it back to anything else.I don't see any mechanism in your code for your modified
param
object to be subsequently used in theImageWriter
.I believe that instead of:
you need to use: