Module java.desktop

Class ImageWriterSpi

所有已实现的接口:
RegisterableService

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

每个ImageWriterSpi通过getVendorNamegetDescriptiongetVersion方法提供与其关联的ImageWriter类的有关信息。这些方法可以国际化以提供特定于区域设置的输出。这些方法主要用于提供可用于组织弹出菜单或其他列表的简短、人类可读的信息。

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

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

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

参见:
  • Field Details

    • STANDARD_OUTPUT_TYPE

      @Deprecated public static final Class<?>[] STANDARD_OUTPUT_TYPE
      Deprecated.
      Instead of using this field, directly create the equivalent array { ImageOutputStream.class }.
      getOutputTypes返回的单元素数组,最初包含ImageOutputStream.class
    • outputTypes

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

      protected String[] readerSpiNames
      getImageReaderSpiNames返回的字符串数组,最初为null
  • Constructor Details

    • 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 - 供应商名称,作为非nullString
      version - 版本标识符,作为非nullString
      names - 一个非nullString数组,指示格式名称。必须至少有一个条目。
      suffixes - 一个String数组,指示常见的文件后缀。如果未定义后缀,则应提供null。长度为0的数组将被规范化为null
      MIMETypes - 一个String数组,指示格式的MIME类型。如果未定义后缀,则应提供null。长度为0的数组将被规范化为null
      writerClassName - 与关联的ImageWriterSpi类的完全限定名称,作为非null String
      outputTypes - 长度至少为1的Class对象数组,指示合法的输出类型。
      readerSpiNames - 长度至少为1的String数组,命名所有关联的ImageReader类,或null。长度为0的数组将被规范化为null
      supportsStandardStreamMetadataFormat - 一个boolean,指示流元数据对象是否可以使用标准元数据格式描述的树。
      nativeStreamMetadataFormatName - 一个String,或null,将从getNativeStreamMetadataFormatName返回。
      nativeStreamMetadataFormatClassName - 一个String,或null,用于实例化一个元数据格式对象,将从getNativeStreamMetadataFormat返回。
      extraStreamMetadataFormatNames - 一个String数组,或null,将从getExtraStreamMetadataFormatNames返回。长度为0的数组将被规范化为null
      extraStreamMetadataFormatClassNames - 一个String数组,或null,用于实例化一个元数据格式对象,将从getStreamMetadataFormat返回。长度为0的数组将被规范化为null
      supportsStandardImageMetadataFormat - 一个boolean,指示图像元数据对象是否可以使用标准元数据格式描述的树。
      nativeImageMetadataFormatName - 一个String,或null,将从getNativeImageMetadataFormatName返回。
      nativeImageMetadataFormatClassName - 一个String,或null,用于实例化一个元数据格式对象,将从getNativeImageMetadataFormat返回。
      extraImageMetadataFormatNames - 一个String数组,将从getExtraImageMetadataFormatNames返回。长度为0的数组将被规范化为null
      extraImageMetadataFormatClassNames - 一个String数组,或null,用于实例化一个元数据格式对象,将从getImageMetadataFormat返回。长度为0的数组将被规范化为null
      抛出:
      IllegalArgumentException - 如果vendorNamenull
      IllegalArgumentException - 如果versionnull
      IllegalArgumentException - 如果namesnull或长度为0。
      IllegalArgumentException - 如果writerClassNamenull
      IllegalArgumentException - 如果outputTypesnull或长度为0。
  • Method Details

    • isFormatLossless

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

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

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

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

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

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

      不同的ImageWriter和因此服务提供者可能选择更加严格或宽松。例如,它们可能接受具有预乘alpha的图像,尽管在存储之前必须从每个像素中除去它,这会导致一定程度的精度损失。

      参数:
      type - 指定要写入的图像布局的ImageTypeSpecifier
      返回:
      如果此写入器可能能够编码具有给定布局的图像,则返回true
      抛出:
      IllegalArgumentException - 如果typenull
    • canEncodeImage

      public boolean canEncodeImage(RenderedImage im)
      返回true,如果与此服务提供者关联的ImageWriter实现能够编码给定的RenderedImage实例。请注意,这包括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实例。
      返回:
      如果识别writer,则返回true
      抛出:
      IllegalArgumentException - 如果writernull
    • getImageReaderSpiNames

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

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

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

      返回:
      包含至少一个ImageReaderSpi名称的String数组,或null
      参见: