2013-03-15 23 views
7

vor kurzem habe ich Probleme, wenn versuchen, eine Bilddatei anzuzeigen. Leider ist das Bildformat TIFF-Format, das von gängigen Webbrowsern nicht unterstützt wird (da ich weiß, dass nur Safari dieses Format unterstützt). Aufgrund bestimmter Einschränkungen muss ich dieses Format in andere Formate umwandeln, die vom Hauptbrowser unterstützt werden. Es bringt jedoch eine Menge Probleme für mich, wenn ich versuche, das Format zu konvertieren.Wie konvertiert man TIFF zu JPEG/PNG in Java

Ich hatte über das Internet suchen und obwohl es ähnliches Problem in diesem Link How do I convert a TIF to PNG in Java? "geschrieben worden, aber ich kann das Ergebnis nicht haben, wie es vorgeschlagen ..

Deshalb ich diese Frage aufwerfen wieder das zu wünschen haben bessere Erklärung und Richtlinien von Ihnen allen ..

es gab nur wenige Ausgabe i während durchlaufen mit der Lösung konfrontiert bin, die vorgeschlagen:

1) nach der Antwort, die von Jonathan Feinberg, vorgeschlagen, brauchen um JAI und JAI/Im zu installieren AlterIO. Jedoch, nachdem ich beide installiert habe, konnte ich die Datei in Netbean 7.2 nicht importieren. NetBean 7.2 bleiben vorzuschlagen Import Standard-ImageIO-Bibliothek.

2) Wenn ich die Standard-ImageIO-Library-Read-Methode verwende, wird NULL zurückgegeben und ich kann nicht fortfahren.

3) Ich habe auch versucht andere Methode wie TIFF-Datei in BIN-Datei mit BufferedOutputStream-Methode zu konvertieren, aber die Ergebnisdatei ist größer als 11 MB, die zu groß ist, um zu laden und am Ende laden fehlgeschlagen.

if (this.selectedDO != null) { 
     String tempDO = this.selectedDO.DONo; 
     String inPath = "J:\\" + tempDO + ".TIF"; 
     String otPath = "J:\\" + tempDO + ".bin"; 

     File opFile = new File(otPath); 

     File inFile = new File(inPath); 

     BufferedInputStream input = null; 
     BufferedOutputStream output = null; 
     try { 
      input = new BufferedInputStream(new FileInputStream(inPath), DEFAULT_BUFFER_SIZE); 
      output = new BufferedOutputStream(new FileOutputStream(otPath), DEFAULT_BUFFER_SIZE); 

      byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
      int length; 
      while ((length = input.read(buffer)) > 0) { 
       output.write(buffer, 0, length); 
      } 

     } finally { 
      try { 
       output.flush(); 
       output.close(); 
       input.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

Daher Hoffnung, die Hilfe erhalten können und raten von Ihnen allen, so dass ich das TIFF-Format in andere Formate umwandeln kann wie JPEG/PNG.

+0

Tak einen Blick auf ImageMagick (http://www.imagemagick.org/script/index.php). Hier ist das Java-Interface für ImageMagic (http://www.jmagick.org/index.html) – pepuch

+0

ist es ähnlich dem ImageMagick, das in [link] vorgeschlagen wurde (http://stackoverflow.com/questions/2291358/how- do-i-convert-a-tif-zu-png-in-java) Ich habe versucht, die Methode, die in diesem Beitrag vorgeschlagen, mithilfe von ImageMagick, aber es konnte nicht fortfahren, wenn zu ConvertCmd convert = new ConvertCmd(); – jc88

Antwort

13

Hatte einige Studien und Tests durchlaufen, fand eine Methode zum Konvertieren von TIFF zu JPEG und Entschuldigung für ausstehende so lange nur diese Antwort hochgeladen.

 SeekableStream s = new FileSeekableStream(inFile); 
     TIFFDecodeParam param = null; 
     ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param); 
     RenderedImage op = dec.decodeAsRenderedImage(0); 

     FileOutputStream fos = new FileOutputStream(otPath); 
     JPEGEncodeParam jpgparam = new JPEGEncodeParam(); 
     jpgparam.setQuality(67); 
     ImageEncoder en = ImageCodec.createImageEncoder("jpeg", fos, jpgparam); 
     en.encode(op); 
     fos.flush(); 
     fos.close(); 

p/s: otPath auf dem Pfad ist gemeint, dass Sie möchten Ihre JPEG-Bild speichern. Zum Beispiel: "C: /image/abc.JPG"; inFile ist die Eingabedatei, die die TIFF-Datei ist

Zumindest ist diese Methode für mich praktikabel. Wenn es eine andere bessere Methode gibt, teilen Sie sie uns bitte mit.

Danke und Grüße,

+1

Sie können das erforderliche Jar von hier aus abrufen: https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/com/sun/media/jai codec/1.1.3/jai-codec-1.1.3.jar –

+0

Dies funktioniert gut für kleine Bilder, wie ich es mit einem Bild von 5,7 KB versucht habe und OK ist, aber dann versucht mit einem Bild von 80 KB und ich bekomme Java. lang.IndexOutOfBoundsException. Irgendeine Hilfe? –

+0

es funktioniert dank ... – ELITE

0

Schauen Sie sich zunächst What is the best java image processing library/approach? an. Für Ihren Code können Sie

javax.imageio.ImageIO.write(im, type, represFile); 

verwenden, wie Sie in write an image to file example sehen können.

+0

Ich habe das Beispiel aus ** MKYong ** ausprobiert, aber wenn es ImageIO.Read kommen, gibt es mir null Ursache nicht lesen TIF-Format..wenn ich JPG und PNG lesen, gibt es kein Problem .. alles glatt, aber einfach wenn versuchen, TIFF-Format zu lesen .. – jc88

+0

Siehe http://stackoverflow.com/questions/2898311/reading-and-writing-out-tiff-image-in-java, könnte es nützlich sein. – user1929959

+0

Danke für Ihren Vorschlag, ich konnte JAI-Jar nicht hinzufügen, obwohl ich bereits in meinem CLASSPATH einschließen, aber immer noch nicht in der Lage, es zu importieren..können Sie mir mehr Informationen zur Verfügung stellen, wie man JAI-Glas einschließt? sehr schätzen mit dir Hilfe – jc88

1
  1. In Abhängigkeit

    <dependency> 
    <groupId>com.github.jai-imageio</groupId> 
    <artifactId>jai-imageio-core</artifactId> 
    <version>1.3.1</version> </dependency> 
    

https://mvnrepository.com/artifact/com.github.jai-imageio/jai-imageio-core

https://mvnrepository.com/artifact/com.github.jai-imageio/jai-imageio-core/1.3.1

  1. Coding

    final BufferedImage tif = ImageIO.read(new File("test.tif")); 
    ImageIO.write(tif, "png", new File("test.png")); 
    
+1

Was ist mit Multi-Seiten Tif-Dateien? Kannst du diese Lib mit tif benutzen, die mehr als eine Seite haben? kannst du etwas Code teilen? Vielen Dank. – delkant