Module java.desktop
Package javax.imageio

Class ImageIO

java.lang.Object
javax.imageio.ImageIO

public final class ImageIO extends Object
包含用于定位ImageReaderImageWriter,以及执行简单编码和解码的静态便利方法的类。
  • Method Details

    • scanForPlugins

      public static void scanForPlugins()
      在应用程序类路径上扫描插件,加载其服务提供程序类,并为每个找到的实例在IIORegistry中注册一个服务提供程序实例。

      此方法是必需的,因为应用程序类路径理论上可以更改,或者可能会有其他插件可用。与在每次调用API时重新扫描类路径不同,类路径仅在第一次调用时自动扫描。客户端可以调用此方法以提示重新扫描。因此,此方法只需要由在运行时动态提供新插件的复杂应用程序调用。

      上下文ClassLoadergetResources方法用于定位包含文件名为META-INF/services/javax.imageio.spi.classname的JAR文件,其中classnameImageReaderSpiImageWriterSpiImageTranscoderSpiImageInputStreamSpiImageOutputStreamSpi之一,沿着应用程序类路径。

      定位文件的内容指示实现上述服务提供程序接口的实际实现类的名称;然后使用默认类加载器加载这些类中的每一个,并实例化每个类的实例,然后将其放入注册表以供以后检索。

      搜索的确切位置集取决于Java运行时环境的实现。

      参见:
    • setUseCache

      public static void setUseCache(boolean useCache)
      设置一个标志,指示在创建ImageInputStreamImageOutputStream时是否应使用基于磁盘的缓存文件。

      当从标准InputStream读取时,可能需要将先前读取的信息保存在缓存中,因为底层流不允许重新读取数据。类似地,当写入标准OutputStream时,可以使用缓存来允许在将其刷新到最终目的地之前更改先前写入的值。

      缓存可以驻留在主内存或磁盘上。将此标志设置为false将禁止将来的流使用磁盘,这在处理小图像时可能是有利的,因为消除了创建和销毁文件的开销。

      在启动时,该值设置为true

      参数:
      useCache - 一个boolean,指示在可选情况下是否应使用缓存文件。
      参见:
    • getUseCache

      public static boolean getUseCache()
      返回由setUseCache设置的当前值,如果没有明确设置,则返回true
      返回:
      如果可以为ImageInputStreamImageOutputStream使用基于磁盘的缓存,则返回true
      参见:
    • setCacheDirectory

      public static void setCacheDirectory(File cacheDirectory)
      设置要创建缓存文件的目录。如果值为null,则表示将使用系统相关的默认临时文件目录。如果getUseCache返回false,则忽略此值。
      参数:
      cacheDirectory - 指定目录的File
      抛出:
      SecurityException - 如果安全管理器拒绝访问该目录。
      IllegalArgumentException - 如果cacheDir为非null但不是目录。
      参见:
    • getCacheDirectory

      public static File getCacheDirectory()
      返回由setCacheDirectory设置的当前值,如果没有明确设置,则返回null
      返回:
      一个File,指示将创建缓存文件的目录,或null以指示使用系统相关的默认临时文件目录。
      参见:
    • createImageInputStream

      public static ImageInputStream createImageInputStream(Object input) throws IOException
      返回一个ImageInputStream,它将从给定的Object获取输入。查询已注册到IIORegistry类的ImageInputStreamSpi集合,并使用能够从提供的对象获取输入的第一个ImageInputStreamSpi来创建返回的ImageInputStream。如果没有合适的ImageInputStreamSpi存在,则返回null

      将使用getUseCachegetCacheDirectory的当前缓存设置来控制缓存。

      参数:
      input - 用作输入源的Object,例如File,可读的RandomAccessFileInputStream
      返回:
      一个ImageInputStream,或null
      抛出:
      IllegalArgumentException - 如果inputnull
      IOException - 如果需要缓存文件但无法创建。
      参见:
    • createImageOutputStream

      public static ImageOutputStream createImageOutputStream(Object output) throws IOException
      返回一个ImageOutputStream,将其输出发送到给定的Object。查询注册到IIORegistry类的ImageOutputStreamSpi集合,并使用能够从提供的对象发送输出的第一个ImageOutputStreamSpi来创建返回的ImageOutputStream。如果没有合适的ImageOutputStreamSpi存在,则返回null

      当前的缓存设置从getUseCachegetCacheDirectory将用于控制缓存。

      参数:
      output - 用作输出目的地的Object,例如File,可写的RandomAccessFileOutputStream
      返回:
      一个ImageOutputStream,或null
      抛出:
      IllegalArgumentException - 如果outputnull
      IOException - 如果需要缓存文件但无法创建。
      参见:
    • getReaderFormatNames

      public static String[] getReaderFormatNames()
      返回一个String数组,列出当前注册的所有读取器了解的所有非正式格式名称。
      返回:
      一个String数组。
    • getReaderMIMETypes

      public static String[] getReaderMIMETypes()
      返回一个String数组,列出当前注册的所有读取器了解的所有MIME类型。
      返回:
      一个String数组。
    • getReaderFileSuffixes

      public static String[] getReaderFileSuffixes()
      返回一个String数组,列出当前注册的所有读取器了解的与格式相关联的所有文件后缀。
      返回:
      一个String数组。
      自:
      1.6
    • getImageReaders

      public static Iterator<ImageReader> getImageReaders(Object input)
      返回一个包含所有当前注册的ImageReaderIterator,它们声称能够解码提供的Object,通常是一个ImageInputStream

      退出此方法时,流位置保持在先前位置。

      参数:
      input - 一个ImageInputStream或其他包含编码图像数据的Object
      返回:
      一个包含ImageReaderIterator
      抛出:
      IllegalArgumentException - 如果inputnull
      参见:
    • getImageReadersByFormatName

      public static Iterator<ImageReader> getImageReadersByFormatName(String formatName)
      返回一个包含所有当前注册的ImageReaderIterator,它们声称能够解码指定格式的文件。
      参数:
      formatName - 包含格式的非正式名称的String(例如,"jpeg"或"tiff")。
      返回:
      一个包含ImageReaderIterator
      抛出:
      IllegalArgumentException - 如果formatNamenull
      参见:
    • getImageReadersBySuffix

      public static Iterator<ImageReader> getImageReadersBySuffix(String fileSuffix)
      返回一个包含所有当前注册的ImageReaderIterator,它们声称能够解码具有给定后缀的文件。
      参数:
      fileSuffix - 包含文件后缀的String(例如,"jpg"或"tiff")。
      返回:
      一个包含ImageReaderIterator
      抛出:
      IllegalArgumentException - 如果fileSuffixnull
      参见:
    • getImageReadersByMIMEType

      public static Iterator<ImageReader> getImageReadersByMIMEType(String MIMEType)
      返回一个包含所有当前注册的ImageReaderIterator,它们声称能够解码具有给定MIME类型的文件。
      参数:
      MIMEType - 包含文件后缀的String(例如,"image/jpeg"或"image/x-bmp")。
      返回:
      一个包含ImageReaderIterator
      抛出:
      IllegalArgumentException - 如果MIMETypenull
      参见:
    • getWriterFormatNames

      public static String[] getWriterFormatNames()
      返回一个String数组,列出当前注册的所有写入器了解的所有非正式格式名称。
      返回:
      一个String数组。
    • getWriterMIMETypes

      public static String[] getWriterMIMETypes()
      返回一个String数组,列出当前注册的所有写入器了解的所有MIME类型。
      返回:
      一个String数组。
    • getWriterFileSuffixes

      public static String[] getWriterFileSuffixes()
      返回一个String数组,列出当前注册的所有写入器了解的与格式相关联的所有文件后缀。
      返回:
      一个String数组。
      自:
      1.6
    • getImageWritersByFormatName

      public static Iterator<ImageWriter> getImageWritersByFormatName(String formatName)
      返回一个包含所有当前注册的ImageWriterIterator,它们声称能够编码指定格式的文件。
      参数:
      formatName - 包含格式的非正式名称的String(例如,"jpeg"或"tiff")。
      返回:
      一个包含ImageWriterIterator
      抛出:
      IllegalArgumentException - 如果formatNamenull
      参见:
    • getImageWritersBySuffix

      public static Iterator<ImageWriter> getImageWritersBySuffix(String fileSuffix)
      返回一个包含所有当前注册的ImageWriterIterator,它们声称能够编码具有给定后缀的文件。
      参数:
      fileSuffix - 包含文件后缀的String(例如,"jpg"或"tiff")。
      返回:
      一个包含ImageWriterIterator
      抛出:
      IllegalArgumentException - 如果fileSuffixnull
      参见:
    • getImageWritersByMIMEType

      public static Iterator<ImageWriter> getImageWritersByMIMEType(String MIMEType)
      返回一个包含所有当前注册的ImageWriterIterator,它们声称能够编码具有给定MIME类型的文件。
      参数:
      MIMEType - 包含文件后缀的String(例如,"image/jpeg"或"image/x-bmp")。
      返回:
      一个包含ImageWriterIterator
      抛出:
      IllegalArgumentException - 如果MIMETypenull
      参见:
    • getImageWriter

      public static ImageWriter getImageWriter(ImageReader reader)
      返回一个ImageWriter,对应于给定的ImageReader,如果存在的话,或者如果此ImageReader的插件未指定相应的ImageWriter,或者给定的ImageReader未注册,则返回null。通过从ImageReader获取此数据并将其传递给使用此方法获取的ImageWriter,客户端程序可以读取图像,以某种方式修改它,并将其写回,保留所有元数据,而无需了解元数据的结构,甚至了解图像格式。请注意,此方法返回“首选”写入器,即javax.imageio.spi.ImageReaderSpi.getImageWriterSpiNames()返回的列表中的第一个写入器。
      参数:
      reader - 已注册的ImageReader的实例。
      返回:
      一个ImageWriter,或者为null。
      抛出:
      IllegalArgumentException - 如果readernull
      参见:
    • getImageReader

      public static ImageReader getImageReader(ImageWriter writer)
      返回与给定ImageWriter对应的ImageReader,如果有的话,如果此ImageWriter的插件未指定相应的ImageReader,或者给定的ImageWriter未注册,则返回null。此方法主要是为了与getImageWriter(ImageReader)对称而提供的。请注意,此方法返回“首选”读取器,即由javax.imageio.spi.ImageWriterSpi.getImageReaderSpiNames()返回的列表中的第一个。
      参数:
      writer - 已注册的ImageWriter的实例。
      返回:
      一个ImageReader,或者为null。
      抛出:
      IllegalArgumentException - 如果writernull
      参见:
    • getImageWriters

      public static Iterator<ImageWriter> getImageWriters(ImageTypeSpecifier type, String formatName)
      返回一个包含所有当前注册的声称能够在给定格式中使用ImageTypeSpecifier指定的布局编码图像的ImageWriterIterator
      参数:
      type - 指示要写入的图像布局的ImageTypeSpecifier
      formatName - format的非正式名称。
      返回:
      一个包含ImageWriterIterator
      抛出:
      IllegalArgumentException - 如果任何参数为null
      参见:
    • getImageTranscoders

      public static Iterator<ImageTranscoder> getImageTranscoders(ImageReader reader, ImageWriter writer)
      返回一个包含所有当前注册的声称能够在给定ImageReaderImageWriter的元数据之间进行转码的ImageTranscoderIterator
      参数:
      reader - 一个ImageReader
      writer - 一个ImageWriter
      返回:
      一个包含ImageTranscoderIterator
      抛出:
      IllegalArgumentException - 如果readerwriternull
    • read

      public static BufferedImage read(File input) throws IOException
      使用从当前注册的ImageReader中自动选择的ImageReader解码提供的File,返回一个BufferedImage。将File包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null

      将使用getUseCachegetCacheDirectory中的当前缓存设置来控制在创建的ImageInputStream中的缓存。

      请注意,没有接受文件名作为Stringread方法;在从文件名创建File后,请使用此方法。

      此方法不会尝试定位可以直接从File读取的ImageReader;可以使用IIORegistryImageReaderSpi来实现。

      参数:
      input - 要读取的File
      返回:
      包含输入内容的BufferedImage,或者null
      抛出:
      IllegalArgumentException - 如果inputnull
      IOException - 如果在读取期间发生错误或无法创建所需的ImageInputStream。
    • read

      public static BufferedImage read(InputStream input) throws IOException
      使用从当前注册的ImageReader中自动选择的ImageReader解码提供的InputStream,返回一个BufferedImage。将InputStream包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null

      将使用getUseCachegetCacheDirectory中的当前缓存设置来控制在创建的ImageInputStream中的缓存。

      此方法不会尝试定位可以直接从InputStream读取的ImageReader;可以使用IIORegistryImageReaderSpi来实现。

      此方法在读取操作完成后不会关闭提供的InputStream;如果需要,调用方有责任关闭流。

      参数:
      input - 要读取的InputStream
      返回:
      包含输入内容的BufferedImage,或者null
      抛出:
      IllegalArgumentException - 如果inputnull
      IOException - 如果在读取期间发生错误或无法创建所需的ImageInputStream。
    • read

      public static BufferedImage read(URL input) throws IOException
      使用从当前注册的ImageReader中自动选择的ImageReader解码提供的URL,返回一个BufferedImage。从URL获取一个InputStream,将其包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null

      将使用getUseCachegetCacheDirectory中的当前缓存设置来控制在创建的ImageInputStream中的缓存。

      此方法不会尝试定位可以直接从URL读取的ImageReader;可以使用IIORegistryImageReaderSpi来实现。

      参数:
      input - 要读取的URL
      返回:
      包含输入内容的BufferedImage,或者null
      抛出:
      IllegalArgumentException - 如果inputnull
      IOException - 如果在读取期间发生错误或无法创建所需的ImageInputStream。
    • read

      public static BufferedImage read(ImageInputStream stream) throws IOException
      使用从当前注册的ImageReader中自动选择的ImageReader解码提供的ImageInputStream,返回一个BufferedImage。如果没有注册的ImageReader声称能够读取流,则返回null

      与此类中的大多数其他方法不同,此方法在读取操作完成后关闭提供的ImageInputStream,除非返回null,在这种情况下,此方法不会关闭流。

      参数:
      stream - 要从中读取的ImageInputStream
      返回:
      包含输入内容的BufferedImage,或者null
      抛出:
      IllegalArgumentException - 如果streamnull
      IOException - 如果在读取期间发生错误。
    • write

      public static boolean write(RenderedImage im, String formatName, ImageOutputStream output) throws IOException
      使用支持给定格式的任意ImageWriter将图像写入ImageOutputStream。从当前流指针开始将图像写入ImageOutputStream,如果存在,则覆盖该点之后的现有流数据。

      此方法在写入操作完成后不会关闭提供的ImageOutputStream;如果需要,调用方有责任关闭流。

      参数:
      im - 要写入的RenderedImage
      formatName - 包含格式的非正式名称的String
      output - 要写入的ImageOutputStream
      返回:
      如果找不到适当的写入器,则为false
      抛出:
      IllegalArgumentException - 如果任何参数为null
      IOException - 如果在写入期间发生错误。
    • write

      public static boolean write(RenderedImage im, String formatName, File output) throws IOException
      使用支持给定格式的任意ImageWriter将图像写入File。如果已经存在File,则其内容将被丢弃。
      参数:
      im - 要写入的RenderedImage
      formatName - 包含格式的非正式名称的String
      output - 要写入的File
      返回:
      如果找不到适当的写入器,则返回false
      抛出:
      IllegalArgumentException - 如果任何参数为null
      IOException - 如果在写入期间发生错误或无法创建所需的ImageOutputStream时。
    • write

      public static boolean write(RenderedImage im, String formatName, OutputStream output) throws IOException
      使用支持给定格式的任意ImageWriter将图像写入OutputStream

      此方法在写入操作完成后不会关闭提供的OutputStream;如果需要,调用者有责任关闭流。

      将使用getUseCachegetCacheDirectory中的当前缓存设置来控制缓存。

      参数:
      im - 要写入的RenderedImage
      formatName - 包含格式的非正式名称的String
      output - 要写入的OutputStream
      返回:
      如果找不到适当的写入器,则返回false
      抛出:
      IllegalArgumentException - 如果任何参数为null
      IOException - 如果在写入期间发生错误或无法创建所需的ImageOutputStream时。