2009-12-23 16 views
20

Non so cosa fare con le immagini TIFF, ma non riesco a leggere o scrivere nessuno di essi utilizzando la libreria ImageIO standard Java standard. qualche idea?Impossibile leggere e scrivere un file di immagine TIFF utilizzando la libreria standard Java ImageIO

Grazie.

+0

Stai usando Java SE? La [Java Advanced Imaging API] (http://java.sun.com/products/java-media/jai/iio.html) supporta TIFF. Dettagli [qui] (https://jai-imageio.dev.java.net/). – MPG

+1

È necessario il [pacchetto JAI] (https://jai.dev.java.net/#Downloads) per gestire i file TIFF. Un semplice esempio per visualizzare un file TIFF: [Visualizza un TIF] (http://www.rgagnon.com/javadetails/java-0605.html) – RealHowTo

risposta

2

Ho provato JAI e non ha funzionato per me.

Dove sei bloccato? Il seguente lavoro per te?

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

Una volta che hai il jai_imageio.jar nel classpath, dovresti semplicemente essere in grado per usare l'API ImageIO come normale – MadProgrammer

-3

Aggiungere dipendenza Maven:

<dependency> 
    <groupId>org.geotoolkit</groupId> 
    <artifactId>geotk-coverageio</artifactId> 
    <version>3.17</version> 
</dependency> 

Codice esempio:

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")); 
+0

temo che la dipendenza non funzioni più. Quello che ha funzionato per me: \t com.github.jai-ImageIO \t jai-ImageIO-core \t 1.3.1 \t (Non ho provato fuori con tutto il codice dei tuoi). – DarkPurpleShadow

9

Se non ti piace o non può utilizzare JAI, per qualsiasi motivo ho scritto un plugin TIFF ImageReader per ImageIO, disponibile su GitHub. È puro Java e non richiede alcuna installazione nativa e viene fornito con una licenza open source molto amichevole (BSD).

Supporta qualsiasi opzione TIFF della linea di base, insieme a molte estensioni standard. Dalla versione 3.1 il plugin TIFF ha anche il supporto per la scrittura.

Con i JAR appropriate nel percorso della classe, l'utilizzo può essere semplice come:

BufferedImage image = ImageIO.read(inputTIFF); 
// ...modify image (compose, resize, sharpen, etc)... 
ImageIO.write(image, "TIFF", outputTIFF); 
+0

HI haraldK come lo usi ??? Non mi piace affatto JAI, non ho trovato alcun esempio su come convertire un file tiff in jpg. Ho provato: BufferedImage image = ImageIO.read (new File (inFile)); ! ImageIO.scrivi (immagine, "jpg", nuovo file (outFile))) – delkant

+0

@delkant Potrebbe funzionare, se hai installato tutto correttamente. Per ulteriori dettagli, consultare le [istruzioni di installazione] (https://github.com/haraldk/TwelveMonkeys#installing) o presentare un problema (con tutti i dettagli) se non si riesce a farlo funzionare. – haraldK

2

Secondo JEP 262: TIFF Image I/O il plugin TIFF che faceva parte di JAI sarà disponibile come parte del Java SE, a partire da Java 9.

Ciò significa che, utilizzando Java 9, il seguente codice sarà solo lavorare, senza importazioni o dipendenze extra:

BufferedImage image = ImageIO.read(inputTIFF); 
// ...modify image (compose, resize, sharpen, etc)... 
ImageIO.write(image, "TIFF", outputTIFF); 

Non sono ancora stato in grado di verificare il supporto per aromi TIFF non di baseline in questo plug-in, ma presumo che almeno i TIFF di base dovrebbero essere pienamente supportati.

Problemi correlati