Class ImageIOExt


  • public class ImageIOExt
    extends Object
    Provides an alternative source of image input and output streams that uses optimized behavior.

    Currently implemented optimizations:

    • wrap an OutputStream into a MemoryCacheImageOutputStream or a FileCacheImageOutputStream based on a image size threshold
    Since:
    2.7.2
    Author:
    Andrea Aime - GeoSolutions
    • Constructor Summary

      Constructors 
      Constructor Description
      ImageIOExt()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static <T extends ImageReaderWriterSpi>
      void
      allowNativeCodec​(String format, Class<T> category, boolean allowed)
      Allows or disallows native acceleration for the specified image format.
      static ImageInputStream createImageInputStream​(Object input)
      Returns a ImageOutputStream suitable for writing on the specified input
      static ImageOutputStream createImageOutputStream​(RenderedImage image, Object destination)
      Builds a ImageOutputStream writing to destination, based on logic that involves the image size
      static File getCacheDirectory()
      Returns the cache directory used by ImageIOExt, either the manually configured one, or the result of calling ImageIO.getCacheDirectory()
      static Long getFilesystemThreshold()
      The threshold at which the class will flip from MemoryCacheImageOutputStream to FileCacheImageOutputStream.
      static ImageInputStreamSpi getImageInputStreamSPI​(Object input)
      Get a proper ImageInputStreamSpi instance for the provided Object input without trying to create an ImageInputStream.
      static ImageInputStreamSpi getImageInputStreamSPI​(Object input, boolean streamCreationCheck)
      Get a proper ImageInputStreamSpi instance for the provided Object input.
      static ImageReader getImageioReader​(ImageInputStream inStream)
      Look for an ImageReader instance that is able to read the provided ImageInputStream, which must be non null.
      static boolean isCLibAvailable()
      Tells me whether or not the native libraries for JAI/ImageIO are active or not.
      static RenderedImage read​(Object input)
      Reads an image from the given input, working around some JDK reader issues.
      static BufferedImage readBufferedImage​(Object input)
      Same as read(Object) but ensures the result is a BufferedImage, eventually transforming it if needs be.
      static void setCacheDirectory​(File cache)
      Sets the directory where cache files are to be created.
      static void setFilesystemThreshold​(Long filesystemThreshold)
      Sets the memory/file usage threshold (or null to have the code fall back on ImageIO behavior)
      • Methods inherited from class Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ImageIOExt

        public ImageIOExt()
    • Method Detail

      • createImageOutputStream

        public static ImageOutputStream createImageOutputStream​(RenderedImage image,
                                                                Object destination)
                                                         throws IOException
        Builds a ImageOutputStream writing to destination, based on logic that involves the image size
        Parameters:
        image - the image to be written on the destination (can be null)
        destination - the destination
        Throws:
        IOException
      • createImageInputStream

        public static ImageInputStream createImageInputStream​(Object input)
                                                       throws IOException
        Returns a ImageOutputStream suitable for writing on the specified input
        Throws:
        IOException
      • getCacheDirectory

        public static File getCacheDirectory()
        Returns the cache directory used by ImageIOExt, either the manually configured one, or the result of calling ImageIO.getCacheDirectory()
      • setCacheDirectory

        public static void setCacheDirectory​(File cache)
        Sets the directory where cache files are to be created. If set to null (the default value) ImageIO.getCacheDirectory() will be used as the value
        Parameters:
        cache - a File specifying a directory.
      • getFilesystemThreshold

        public static Long getFilesystemThreshold()
        The threshold at which the class will flip from MemoryCacheImageOutputStream to FileCacheImageOutputStream. If the in memory, uncompressed image size is lower than the threshold a MemoryCacheImageOutputStream will be returned, otherwise a FileCacheImageOutputStream will be used instead
      • setFilesystemThreshold

        public static void setFilesystemThreshold​(Long filesystemThreshold)
        Sets the memory/file usage threshold (or null to have the code fall back on ImageIO behavior)
        See Also:
        getFilesystemThreshold()
      • allowNativeCodec

        public static <T extends ImageReaderWriterSpi> void allowNativeCodec​(String format,
                                                                             Class<T> category,
                                                                             boolean allowed)
        Allows or disallows native acceleration for the specified image format. By default, the image I/O extension for JAI provides native acceleration for PNG and JPEG. Unfortunatly, those native codec has bug in their 1.0 version. Invoking this method will force the use of standard codec provided in J2SE 1.4.

        Implementation note: the current implementation assume that JAI codec class name start with "CLib". It work for Sun's 1.0 implementation, but may change in future versions. If this method doesn't recognize the class name, it does nothing.

        Parameters:
        format - The format name (e.g. "png").
        category - ImageReaderSpi.class to set the reader, or ImageWriterSpi.class to set the writer.
        allowed - false to disallow native acceleration.
      • getImageInputStreamSPI

        public static final ImageInputStreamSpi getImageInputStreamSPI​(Object input)
        Get a proper ImageInputStreamSpi instance for the provided Object input without trying to create an ImageInputStream.
        See Also:
        getImageInputStreamSPI(Object, boolean)
      • getImageInputStreamSPI

        public static final ImageInputStreamSpi getImageInputStreamSPI​(Object input,
                                                                       boolean streamCreationCheck)
        Get a proper ImageInputStreamSpi instance for the provided Object input.
        Parameters:
        input - the input object for which we need to find a proper ImageInputStreamSpi instance
        streamCreationCheck - if true, when a proper ImageInputStreamSpi have been found for the provided input, use it to try creating an ImageInputStream on top of the input.
        Returns:
        an ImageInputStreamSpi instance.
      • isCLibAvailable

        public static boolean isCLibAvailable()
        Tells me whether or not the native libraries for JAI/ImageIO are active or not.
        Returns:
        false in case the JAI/ImageIO native libs are not in the path, true otherwise.
      • getImageioReader

        public static ImageReader getImageioReader​(ImageInputStream inStream)
        Look for an ImageReader instance that is able to read the provided ImageInputStream, which must be non null.

        In case no reader is found, null is returned.

        Parameters:
        inStream - an instance of ImageInputStream for which we need to find a suitable ImageReader.
        Returns:
        a suitable instance of ImageReader or null if one cannot be found.
      • read

        public static RenderedImage read​(Object input)
                                  throws IOException
        Reads an image from the given input, working around some JDK reader issues. At the time of writing, this applies a work around for PNGs with RGB (no alpha) and a transparent color configured in the header, that the JDK reader cannot handle.
        Parameters:
        input - A non null image source, like a File, URL, or InputStream
        Returns:
        A image
        Throws:
        IOException
      • readBufferedImage

        public static BufferedImage readBufferedImage​(Object input)
                                               throws IOException
        Same as read(Object) but ensures the result is a BufferedImage, eventually transforming it if needs be. Callers that can deal with RenderedImage should use the other method for efficiency sake.
        Returns:
        A image
        Throws:
        IOException