Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8241405

ImageIO throws exception function with specific pages of Multipage TIFF document

XMLWordPrintable

      ADDITIONAL SYSTEM INFORMATION :
      Tomcat 8/8.5/9 on Windows 10 with Java 1.8.0_221.

      A DESCRIPTION OF THE PROBLEM :
       We get the javax.imageio.IIOException when trying to call javax.imageio.ImageReader.read() function on the pages 6-10 of the attached multipage tiff.
      Full Exception message - javax.imageio.IIOException: 16-bit samples are not supported for Horizontal differencing Predictor.



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      The following code snippet would reproduce the issue:

      FileImageInputStream fis = new FileImageInputStream(<Source path to the attached tiff document>);
      final ImageReader tiffReader = ImageIO.getImageReadersByFormatName("tiff").next();
      tiffReader.setInput(fis);
      BufferedImage bi = tiffReader.read(<desired page no of the tiff document>);


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      A valid Buffered Image as a result of tiffReader.read(<desired page no of the tiff document>);
      ACTUAL -
      we get the following Trace:

      javax.imageio.IIOException: 16-bit samples are not supported for Horizontal differencing Predictor
            at com.sun.media.imageioimpl.plugins.tiff.TIFFLZWDecompressor.decodeRaw(TIFFLZWDecompressor.java:108)
            at com.sun.media.imageio.plugins.tiff.TIFFDecompressor.decodeRaw(TIFFDecompressor.java:2024)
            at com.sun.media.imageio.plugins.tiff.TIFFDecompressor.decode(TIFFDecompressor.java:2597)
            at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.decodeTile(TIFFImageReader.java:1153)
            at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1454)
            at javax.imageio.ImageReader.read(Unknown Source)
            at com.perceptivesoftware.web.docviewer.server.docmodel.imageutils.ImageUtil.getTiffPageAsJpg(ImageUtil.java:285)
            at com.perceptivesoftware.web.docviewer.server.docmodel.document.TiffDocument.getBufferedImageFromRawFile(TiffDocument.java:65)
            at com.perceptivesoftware.web.docviewer.server.docmodel.document.Document.getUncachedAntiAliasedBufferedImageFromRawFile(Document.java:125)
            at com.perceptivesoftware.web.docviewer.server.view.DocumentViewBusinessLogic.getDocumentDimensions(DocumentViewBusinessLogic.java:59)
            at com.perceptivesoftware.web.docviewer.server.view.DocumentViewBusinessLogic.getDocumentDimensions(DocumentViewBusinessLogic.java:83)
            at com.perceptivesoftware.web.docviewer.server.rpc.DocumentViewerServiceImpl.getDocumentDimensions(DocumentViewerServiceImpl.java:81)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
            at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:545)
            at org.spring4gwt.server.SpringGwtRemoteServiceServlet.processCall(SpringGwtRemoteServiceServlet.java:37)
            at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
            at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at com.perceptivesoftware.security.GWTCacheControlFilter.doFilter(GWTCacheControlFilter.java:50)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at com.perceptivesoftware.security.P3PFilter.doFilter(P3PFilter.java:29)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
            at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
            at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            at java.lang.Thread.run(Unknown Source)



      ---------- BEGIN SOURCE ----------
      Calling the below function with requestedPage parameter as 6-10 would replicate the issue:

      public static BufferedImage testFunction(int requestedPage, File docPath)
            {
                  
                  FileImageInputStream ss = null;
                  BufferedImage ri = null;
                  try
                  {
                        ss = new FileImageInputStream(docPath);
                        final ImageReader tiffReader = ImageIO.getImageReadersByFormatName("tiff").next();
                        tiffReader.setInput(ss);
                        ri = tiffReader.read(requestedPage - 1);
                        
                  }
                  catch (final IOException ioe)
                  {
                        System.out.println("IO Exception occurred while extracting TIF page", ioe);
                  }
                  finally
                  {
                        if (ss != null)
                        {
                              try
                              {
                                    ss.close();
                              }
                              catch (final IOException ioe)
                              {
                                    System.out.println("IO Exception while closing seekable stream after extracting TIF page");
                              }
                        }
                  }
                  return ri;
            }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      We could not find a workaround to date.

      FREQUENCY : always


            pardesha Pardeep Sharma
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: