2013-03-15 34 views
7

ostatnio mam problem, gdy próbuję wyświetlić plik obrazu. Niestety, formatem obrazu jest format TIFF, który nie jest obsługiwany przez większą przeglądarkę internetową (jak wiem, tylko Safari obsługuje ten format). Z powodu pewnych ograniczeń, muszę przekonwertować ten format na inny format obsługiwany przez główną przeglądarkę. Jednak przynosi to wiele problemów, gdy próbuję konwertować format.Jak przekonwertować TIFF na JPEG/PNG w java

miałem przeglądać w internecie i chociaż nie został opublikowany podobny problem w ten link How do I convert a TIF to PNG in Java? ", ale nie mogę mieć wynik, gdyż proponowane ..

Dlatego podnieść to pytanie jeszcze raz życzyć, które mogą mieć lepsze wyjaśnienie i wytyczne z wami wszystkimi ..

było niewiele problem jestem do czynienia podczas przejść z roztworem, który zaproponował:

1) Zgodnie z odpowiedzią, że proponowany przez Jonathan Feinberg, to trzeba zainstalować JAI i JAI/Im ageIO. Jednak po zainstalowaniu obu z nich nadal nie mogę zaimportować pliku do Netbean 7.2. NetBean 7.2 nadal proponuj import domyślnej biblioteki imageIO.

2) kiedy używam domyślnej biblioteki ReadIO biblioteki Read method, zwróci ona wartość NULL i nie mogę kontynuować.

3) Próbowałem również innych metod, takich jak konwertowanie pliku TIFF do pliku BIN za pomocą metody BufferedOutputStream, ale plik wynikowy jest większy niż 11 MB, który jest zbyt duży, aby załadować i załadowanie zakończy się niepowodzeniem.

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

Stąd nadzieja, że ​​można uzyskać pomoc i doradztwo od was wszystkich tak, że można konwertować do formatu TIFF innego formatu, takich jak JPEG/PNG.

+0

tak spojrzeć na ImageMagick (http://www.imagemagick.org/script/index.php). Tutaj jest domena java dla ImageMagic (http://www.jmagick.org/index.html) – pepuch

+0

jest podobna do ImageMagick, która została zaproponowana w [link] (http://stackoverflow.com/questions/2291358/how- do-i-convert-a-tif-to-png-in-java) Próbowałem metody, która została zaproponowana w tym poście za pomocą ImageMagick, ale nie udało się kontynuować, gdy dojdzie do 'ConvertCmd convert = new ConvertCmd();' – jc88

Odpowiedz

13

Przeszedłem przez niektóre badania i testy, znalazłem metodę konwersji TIFF do JPEG i przepraszam za oczekujące tak długo tylko przesłałem tę odpowiedź.

 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 oznacza ścieżkę, w której chciałbyś zapisać swój obraz JPEG. Na przykład: "C: /image/abc.JPG"; inFile jest plikiem wejściowym, który jest plikiem TIFF

Przynajmniej ta metoda jest możliwa do zastosowania. Jeśli istnieje jakakolwiek inna lepsza metoda, uprzejmie podziel się z nami.

Dzięki i Pozdrawiam,

+1

Możesz pobrać wymagany jar z: https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/com/sun/media/jai- kodek/1.1.3/jai-codec-1.1.3.jar –

+0

Działa to dobrze dla małych obrazów, tak jak próbowałem z obrazem 5,7 KB i jest OK, ale potem wypróbowałem z obrazem 80 KB i otrzymałem Javę. lang.IndexOutOfBoundsException. Jakaś pomoc? –

+0

zadziałało dzięki ... – ELITE

0

Najpierw spójrz na What is the best java image processing library/approach?. Dla swojego kodu możesz użyć

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

, jak możesz zobaczyć w write an image to file example.

+0

Próbowałem tego przykładu od ** MKYong **, ale kiedy przychodzi to ImageIO.Read, to zwraca mi null, bo nie jest w stanie odczytać formatu TIF .. jeśli czytam JPG i PNG nie pojawi się problem .. wszystko poszło gładko, ale po prostu kiedy próbujesz odczytać format TIFF .. – jc88

+0

Zobacz http://stackoverflow.com/questions/2898311/reading-andwriting-out-tiff-image-in-java, może to być przydatne. – user1929959

+0

Dzięki za sugestię, nie udało mi się dodać JAI jar, mimo że już uwzględnione w moim CLASSPATH, ale nadal nie jest w stanie zaimportować .. możesz podać mi więcej informacji dotyczących sposobu włączenia JAI jar? bardzo doceniam, pomagając – jc88

1
  1. Dodaj zależność

    <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. kodowania

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

Co z plikami TIF z wieloma stronami? czy możesz używać tej biblioteki z TIF, które mają więcej niż jedną stronę? czy możesz podzielić się jakimś kodem? dzięki. – delkant