java image compression tiff javax.imageio

Compresión de Tiff con Java ImageIO



compression javax.imageio (2)

No sé Java IO, pero en general quieres ver algunas cosas

  1. ¿Puedes usar compresión JPEG en lugar de LZW?
  2. Vea cómo configurar el tamaño de la tira TIFF: si lo que desea es un tamaño pequeño, configúrelo a la altura de la imagen.

Editar: parece que TiffWriteParam tiene los siguientes métodos

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

establezca imageWidth y imageHeight vars al tamaño de su imagen. La desventaja es que será más lento leer regiones de la imagen.

Tengo problemas para convertir un png en tiff. La conversión va bien, pero la imagen es enorme. Creo que el problema es que no estoy haciendo la compresión correctamente? ¿¿Alguien tiene alguna sugerencia??

Aquí está el ejemplo del código

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


Writer.getDefaultWriteParam() solo crea un objeto ImageWriteParam , no lo vincula a nada más.

No veo ningún mecanismo en su código para que su objeto param modificado sea utilizado posteriormente en el ImageWriter .

Yo creo que en lugar de:

writer.write(bi);

necesitas usar:

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