No sé qué hacer con las imágenes TIFF, pero no puedo leer ni escribir ninguna utilizando la biblioteca estándar de ImageIO de Java. ¿Alguna idea?No puedo leer y escribir un archivo de imagen TIFF usando la biblioteca estándar Java ImageIO
Gracias.
No sé qué hacer con las imágenes TIFF, pero no puedo leer ni escribir ninguna utilizando la biblioteca estándar de ImageIO de Java. ¿Alguna idea?No puedo leer y escribir un archivo de imagen TIFF usando la biblioteca estándar Java ImageIO
Gracias.
Intenté JAI, y no funcionó para mí.
¿Dónde estás atrapado? ¿Funciona lo siguiente para usted?
import java.io.File;
import java.io.FileOutputStream;
import java.awt.image.RenderedImage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
public class Main {
public static void main(String args[]) {
File file = new File("input.tif");
try {
SeekableStream s = new FileSeekableStream(file);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = new NullOpImage(dec.decodeAsRenderedImage(0),
null,
OpImage.OP_IO_BOUND,
null);
FileOutputStream fos = new FileOutputStream("output.jpg");
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
jpeg.encode(op.getData());
fos.close();
}
catch (java.io.IOException ioe) {
System.out.println(ioe);
}
}
}
Una vez que tenga jai_imageio.jar en su classpath, simplemente debería ser capaz de para usar la API de ImageIO como es normal – MadProgrammer
Añadir dependencia Maven:
<dependency>
<groupId>org.geotoolkit</groupId>
<artifactId>geotk-coverageio</artifactId>
<version>3.17</version>
</dependency>
Código ejemplo:
import org.geotoolkit.image.io.plugin.RawTiffImageReader;
IIORegistry registry = IIORegistry.getDefaultInstance();
registry.registerServiceProvider(new RawTiffImageReader.Spi());
String[] a = ImageIO.getReaderFileSuffixes();
for (int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
BufferedImage image = ImageIO.read(new File("C:\\mypic.tiff"));
ImageIO.write(image, "jpg",new File("C:\\out.jpg"));
ImageIO.write(image, "gif",new File("C:\\out.gif"));
ImageIO.write(image, "png",new File("C:\\out.png"));
ImageIO.write(image, "tif",new File("C:\\out.tiff"));
Me temo que la dependencia ya no funciona. Lo que funcionó para mí:
Si no te gusta o no puede utilizar JAI por la razón que he escrito un plugin TIFF ImageReader para ImageIO, disponible en GitHub. Es puramente Java y no necesita ninguna instalación nativa, y viene con una licencia de código abierto (BSD) muy amigable.
Es compatible con cualquier opción TIFF de referencia, junto con una gran cantidad de extensiones estándar. Desde la versión 3.1, el complemento TIFF también tiene soporte de escritura.
Con los JAR adecuado en su ruta de clase, el uso puede ser tan simple como:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
HI haraldK ¿cómo se usa esto ??? No me gusta JAI en absoluto, no pude encontrar ningún ejemplo sobre cómo convertir un archivo tiff a jpg. Intenté: BufferedImage image = ImageIO.read (new File (inFile)); ! ImageIO.write (image, "jpg", new File (outFile))) – delkant
@delkant Eso podría funcionar, si tiene todo correctamente instalado. Consulte las [instrucciones de instalación] (https://github.com/haraldk/TwelveMonkeys#installing) para obtener más detalles, o presente un problema (con todos los detalles) si no puede hacerlo funcionar. – haraldK
Según JEP 262: TIFF Image I/O el plugin TIFF que solía ser parte de JAI estará disponible como parte del Java SE, partiendo de Java 9.
Eso significa, utilizando Java 9, el siguiente código se acaba de trabajar, sin ningún tipo de importaciones o dependencias adicionales:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
Todavía no he podido verificar el soporte para los sabores TIFF que no están en la línea base en este complemento, pero supongo que al menos los TIFF de línea de base deben ser totalmente compatibles.
¿Estás usando Java SE? La [API de Java Advanced Imaging] (http://java.sun.com/products/java-media/jai/iio.html) es compatible con TIFF. Detalles [aquí] (https://jai-imageio.dev.java.net/). – MPG
Necesita el [paquete JAI] (https://jai.dev.java.net/#Downloads) para tratar con archivos TIFF. Un ejemplo simple para mostrar un archivo TIFF: [Mostrar un TIF] (http://www.rgagnon.com/javadetails/java-0605.html) – RealHowTo