模块 java.desktop

类 ImageWriterSpi

所有已实现的接口:
RegisterableService

public abstract class ImageWriterSpi extends ImageReaderWriterSpi
ImageWriters 的服务提供商接口 (SPI)。有关服务提供者类的更多信息,请参阅 IIORegistry 类的类注解。

每个 ImageWriterSpi 都提供有关与其关联的 ImageWriter 类的几种类型的信息。

定义 SPI 类的供应商名称和类的简要说明可通过 getVendorNamegetDescriptiongetVersion 方法获得。这些方法可以国际化以提供特定于locale的输出。这些方法主要用于提供简短的、人类可写的信息,这些信息可用于组织弹出菜单或其他列表。

可以通过 getFormatNamesgetFileSuffixesgetMIMEType 方法获取与服务关联的格式名称、文件后缀和 MIME 类型的列表。这些方法可用于根据手动格式选择、文件命名或 MIME 关联来识别用于编写特定文件或流的候选 ImageWriter s。

canEncodeImage 方法提供了一种更可靠的方法来确定哪些 ImageWriter 可能能够解析特定数据流。此方法允许服务提供商检查实际图像内容。

最后,可以通过调用 createWriterInstance 方法获得与该服务提供者关联的 ImageWriter 类的实例。任何重量级的初始化,例如本地库的加载或大型表的创建,都应该至少推迟到第一次调用此方法时。

参见:
  • 字段详细信息

    • STANDARD_OUTPUT_TYPE

      @Deprecated public static final Class <?>[] STANDARD_OUTPUT_TYPE
      已弃用。
      不使用此字段,而是直接创建等效数组 { ImageOutputStream.class }
      一个单元素数组,最初包含 ImageOutputStream.class,将从 getOutputTypes 返回。
    • outputTypes

      protected Class <?>[] outputTypes
      getOutputTypes 返回的 Class 对象数组,最初是 null
    • readerSpiNames

      protected String [] readerSpiNames
      要从 getImageReaderSpiNames 返回的字符串数组,最初是 null
  • 构造方法详细信息

    • ImageWriterSpi

      protected ImageWriterSpi()
      构造一个空白 ImageWriterSpi 。由子类初始化实例变量和/或覆盖方法实现,以提供所有方法的工作版本。
    • ImageWriterSpi

      public ImageWriterSpi(String  vendorName, String  version, String [] names, String [] suffixes, String [] MIMETypes, String  writerClassName, Class <?>[] outputTypes, String [] readerSpiNames, boolean supportsStandardStreamMetadataFormat, String  nativeStreamMetadataFormatName, String  nativeStreamMetadataFormatClassName, String [] extraStreamMetadataFormatNames, String [] extraStreamMetadataFormatClassNames, boolean supportsStandardImageMetadataFormat, String  nativeImageMetadataFormatName, String  nativeImageMetadataFormatClassName, String [] extraImageMetadataFormatNames, String [] extraImageMetadataFormatClassNames)
      使用给定的一组值构造一个 ImageWriterSpi
      参数:
      vendorName - 供应商名称,作为非 null String
      version - 版本标识符,作为非null String
      names - String 的非null 数组,指示格式名称。必须至少存在一项。
      suffixes - 指示通用文件后缀的 String 数组。如果未定义后缀,则应提供 null。长度为 0 的数组将被规范化为 null
      MIMETypes - 指示格式的 MIME 类型的 String 数组。如果未定义后缀,则应提供 null。长度为 0 的数组将被规范化为 null
      writerClassName - 关联的 ImageWriterSpi 类的完全限定名称,作为非 null String
      outputTypes - 长度至少为 1 的 Class 对象数组,指示合法输出类型。
      readerSpiNames - 长度至少为 1 的数组 String 命名所有关联的 ImageReadernull 的类。长度为 0 的数组被标准化为 null
      supportsStandardStreamMetadataFormat - 一个 boolean 指示流元数据对象是否可以使用标准元数据格式描述的树。
      nativeStreamMetadataFormatName - 从 getNativeStreamMetadataFormatName 返回的 Stringnull
      nativeStreamMetadataFormatClassName - 一个 Stringnull ,用于实例化要从 getNativeStreamMetadataFormat 返回的元数据格式对象。
      extraStreamMetadataFormatNames - 从 getExtraStreamMetadataFormatNames 返回的 Stringnull 的数组。长度为 0 的数组被标准化为 null
      extraStreamMetadataFormatClassNames - Stringnull 的数组,用于实例化要从 getStreamMetadataFormat 返回的元数据格式对象。长度为 0 的数组被标准化为 null
      supportsStandardImageMetadataFormat - 一个 boolean 指示图像元数据对象是否可以使用标准元数据格式描述的树。
      nativeImageMetadataFormatName - 从 getNativeImageMetadataFormatName 返回的 Stringnull
      nativeImageMetadataFormatClassName - 一个 Stringnull ,用于实例化要从 getNativeImageMetadataFormat 返回的元数据格式对象。
      extraImageMetadataFormatNames - 要从 getExtraImageMetadataFormatNames 返回的 String 数组。长度为 0 的数组被标准化为 null
      extraImageMetadataFormatClassNames - Stringnull 的数组,用于实例化要从 getImageMetadataFormat 返回的元数据格式对象。长度为 0 的数组被标准化为 null
      抛出:
      IllegalArgumentException - 如果 vendorNamenull
      IllegalArgumentException - 如果 versionnull
      IllegalArgumentException - 如果 namesnull 或长度为 0。
      IllegalArgumentException - 如果 writerClassNamenull
      IllegalArgumentException - 如果 outputTypesnull 或长度为 0。
  • 方法详情

    • isFormatLossless

      public boolean isFormatLossless()
      如果此编写器输出的格式精确地保留像素数据,则返回 true。默认实现返回 true
      返回:
      true 如果格式保留全像素精度。
    • getOutputTypes

      public Class <?>[] getOutputTypes()
      返回一个 Class 对象数组,指示哪些类型的对象可以用作作者的 setOutput 方法的参数。

      对于仅输出到 ImageOutputStream 的大多数编写器,应返回包含 ImageOutputStream.class 的单元素数组。

      返回:
      长度至少为 1 的 Class 对象的非 null 数组。
    • canEncodeImage

      public abstract boolean canEncodeImage(ImageTypeSpecifier  type)
      如果与此服务提供商关联的 ImageWriter 实现能够使用给定布局对图像进行编码,则返回 true。布局 (IE,图像的 SampleModelColorModel ) 由 ImageTypeSpecifier 对象描述。

      true 的返回值并不是编码成功的绝对保证;编码过程仍然可能由于 I/O 错误、不一致或格式错误的数据结构等因素而产生错误。目的是对图像的基本结构进行合理的检查,以确定它是否在编码格式的范围。例如,如果传递给 RGB BufferedImage,则只能对灰度进行编码的格式的服务提供商将返回 false。同样,可以对 8 位 RGB 图像进行编码的格式的服务提供商可能会拒绝使用关联的 alpha 通道对图像进行编码。

      不同的 ImageWriter 以及服务提供商可能会选择更严格或更不严格。例如,他们可能会接受具有预乘 alpha 的图像,即使它必须从每个像素中分离出来,但会损失一些精度,以便存储。

      参数:
      type - 一个 ImageTypeSpecifier 指定要写入的图像的布局。
      返回:
      true 作者是否能够使用给定的布局对图像进行编码。
      抛出:
      IllegalArgumentException - 如果 typenull
    • canEncodeImage

      public boolean canEncodeImage(RenderedImage  im)
      如果与此服务提供商关联的 ImageWriter 实现能够对给定的 RenderedImage 实例进行编码,则返回 true。请注意,这包括 java.awt.image.BufferedImage 的实例。

      有关此方法语义的信息,请参阅 canEncodeImage(ImageTypeSpecifier) 的讨论。

      参数:
      im - 要编码的 RenderedImage 实例。
      返回:
      true 作者是否有可能对此图像进行编码。
      抛出:
      IllegalArgumentException - 如果 imnull
    • createWriterInstance

      public ImageWriter  createWriterInstance() throws IOException
      返回与此服务提供商关联的 ImageWriter 实现的实例。返回的对象最初将处于初始状态,就好像其 reset 方法已被调用一样。

      默认实现只返回 createWriterInstance(null)

      返回:
      一个ImageWriter实例。
      抛出:
      IOException - 如果在写入器类的加载或初始化期间,或者在写入器对象的实例化或初始化期间发生错误。
    • createWriterInstance

      public abstract ImageWriter  createWriterInstance(Object  extension) throws IOException
      返回与此服务提供商关联的 ImageWriter 实现的实例。返回的对象最初将处于初始状态,就好像其 reset 方法已被调用一样。

      Object 可以在构建时提供给插件。对象的性质完全是插件特定的。

      通常,插件将使用诸如 return new MyImageWriter(this) 之类的代码来实现此方法。

      参数:
      extension - 插件特定的扩展对象,可能是 null
      返回:
      一个ImageWriter实例。
      抛出:
      IOException - 如果实例化编写器的尝试失败。
      IllegalArgumentException - 如果 ImageWriter 的构造函数抛出 IllegalArgumentException 以指示扩展对象不合适。
    • isOwnWriter

      public boolean isOwnWriter(ImageWriter  writer)
      如果传入的 ImageWriter 对象是与此服务提供商关联的 ImageWriter 的实例,则返回 true
      参数:
      writer - 一个 ImageWriter 实例。
      返回:
      true 如果writer 被识别
      抛出:
      IllegalArgumentException - 如果 writernull
    • getImageReaderSpiNames

      public String [] getImageReaderSpiNames()
      返回一个 String 的数组,其中包含所有 ImageReaderSpi 类的所有完全限定名称,这些类可以理解与此服务提供商关联的 ImageWriter 使用的内部元数据表示,或者 null 如果没有指定这样的 ImageReaders 。如果返回非 null 值,则它的长度必须非零。

      数组中的第一项必须是“首选”阅读器的服务提供商的名称,因为它将用于实例化 ImageIO.getImageReader(ImageWriter) 返回的 ImageReader

      此机制可用于获取 ImageReaders,它将以 ImageWriter 理解的结构生成非像素元数据(参见 IIOExtraDataInfo)。通过读取图像并从使用此方法获得的 ImageReaders 之一获取此数据并将其传递给 ImageWriter ,客户端程序可以读取图像,以某种方式修改它,然后将其写回保留所有元数据,无需了解元数据的内部结构,甚至图像格式。

      返回:
      长度至少为 1 的 String 数组,包含 ImageReaderSpinull 的名称。
      参见: