javax.imageio.spi

接口
java.lang.Object
  继承者 javax.imageio.spi.IIOServiceProvider
      继承者 javax.imageio.spi.ImageReaderWriterSpi
          继承者 javax.imageio.spi.ImageWriterSpi
所有已实现的接口:
RegisterableService

public abstract class ImageWriterSpi
     
extends ImageReaderWriterSpi

用于 ImageWriter 的服务提供者接口 (SPI)。有关服务提供者类的更多信息,请参见 IIORegistry 类的注释。

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

使用 getVendorNamegetDescriptiongetVersion 方法可获得定义 SPI 类和此类简明描述的供应商的名称。可将这些方法进行国际化,以提供特对于语言环境的输出。这些方法主要用于提供可用于组织弹出菜单或其他列表的简短可写信息。

使用 getFormatNamesgetFileSuffixesgetMIMEType 方法可获得与服务有关联的格式名称、文件后缀和 MIME 类型的列表。使用这些方法可识别候选 ImageWriter,从而基于手动格式选择、文件命名或 MIME 关联写入特定文件或流。

canEncodeImage 方法提供了确定最有可能解析特定数据流的 ImageWriter 的更可靠途径。此方法允许服务提供者检查实际的图像内容。

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

另请参见:
IIORegistry, ImageTypeSpecifier, ImageWriter

字段摘要
protected  Class[] outputTypes
          将从 getOutputTypes 返回的 Class 对象的数组,该数组最初为 null
protected  String[] readerSpiNames
          将从 getImageReaderSpiNames 返回的字符串数组,该数组最初为 null
static Class[] STANDARD_OUTPUT_TYPE
          从 getInputTypes 返回的单元素数组,该数组最初包含 ImageInputStream.class
 
从类 javax.imageio.spi.ImageReaderWriterSpi 继承的字段
extraImageMetadataFormatClassNames, extraImageMetadataFormatNames, extraStreamMetadataFormatClassNames, extraStreamMetadataFormatNames, MIMETypes, names, nativeImageMetadataFormatClassName, nativeImageMetadataFormatName, nativeStreamMetadataFormatClassName, nativeStreamMetadataFormatName, pluginClassName, suffixes, supportsStandardImageMetadataFormat, supportsStandardStreamMetadataFormat
 
从类 javax.imageio.spi.IIOServiceProvider 继承的字段
vendorName, version
 
构造方法摘要
protected ImageWriterSpi()
          构造一个空的 ImageWriterSpi
  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
 
方法摘要
abstract  boolean canEncodeImage(ImageTypeSpecifier type)
          如果与此服务提供者关联的 ImageWriter 实现能够使用给定的布局编码图像,则返回 true
 boolean canEncodeImage(RenderedImage im)
          如果与此服务提供者关联的 ImageWriter 实现能够编码给定的 RenderedImage 实例,则返回 true
 ImageWriter createWriterInstance()
          返回与此服务提供者关联的 ImageWriter 实现的实例。
abstract  ImageWriter createWriterInstance(Object extension)
          返回与此服务提供者关联的 ImageWriter 实现的实例。
 String[] getImageReaderSpiNames()
          返回一个 String 数组,该数组包含所有能够理解由与此服务提供者关联的 ImageWriter 使用的内部元数据表示形式的 ImageReaderSpi 类的完全限定名。
 Class[] getOutputTypes()
          返回 Class 对象数组,指示可用作 setOutput 方法参数的对象类型。
 boolean isFormatLossless()
          如果此 writer 输出的格式准确保留了像素数据位,则返回 true
 boolean isOwnWriter(ImageWriter writer)
          如果传入的 ImageWriter 对象是与此服务提供者关联的 ImageWriter 的实例,则返回 true
 
从类 javax.imageio.spi.ImageReaderWriterSpi 继承的方法
getExtraImageMetadataFormatNames, getExtraStreamMetadataFormatNames, getFileSuffixes, getFormatNames, getImageMetadataFormat, getMIMETypes, getNativeImageMetadataFormatName, getNativeStreamMetadataFormatName, getPluginClassName, getStreamMetadataFormat, isStandardImageMetadataFormatSupported, isStandardStreamMetadataFormatSupported
 
从类 javax.imageio.spi.IIOServiceProvider 继承的方法
getDescription, getVendorName, getVersion, onDeregistration, onRegistration
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

STANDARD_OUTPUT_TYPE

public static final Class[] STANDARD_OUTPUT_TYPE
getInputTypes 返回的单元素数组,该数组最初包含 ImageInputStream.class


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

isFormatLossless

public boolean isFormatLossless()
如果此 writer 输出的格式准确保留了像素数据位,则返回 true。默认实现返回 true

返回:
如果格式完全保留了像素的准确性,则返回 true

getOutputTypes

public Class[] getOutputTypes()
返回 Class 对象数组,指示可用作 setOutput 方法参数的对象类型。

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

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

canEncodeImage

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

返回的值为 true 并不能绝对保证成功地编码;编码过程中仍有可能因为类似 I/O 错误、不一致或错误的数据结构等而产生错误。执行对图像的基本结构的合理检查是为了确定图像是否处在编码格式范围内。例如,如果要求一个只能编码灰度格式的服务提供者处理 RGB BufferedImage,将返回 false。类似地,能够编码 8 位 RGB 图像格式的服务提供者可能拒绝编码与 alpha 通道关联的图像。

不同的 ImageWriter 以及由此导致的不同的服务提供者,可以更严格或更松散。例如,即使为了存储而不得不减少每个图像的像素,从而使精度下降,也有可能接受预乘 alpha 的图像。

参数:
type - 指定将要写入的图像的布局的 ImageTypeSpecifier
返回:
如果 writer 看起来能够按给定的布局编码此图像,则返回 true
抛出:
IllegalArgumentException - 如果 typenull

canEncodeImage

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

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

参数:
im - 要编码的 RenderedImage 的实例。
返回:
如果 writer 看起来能够编码此图像,则返回 true
抛出:
IllegalArgumentException - 如果 imnull

createWriterInstance

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

默认实现只返回 createWriterInstance(null)

返回:
一个 ImageWriter 实例。
抛出:
IOException - 如果加载或初始化 writer 类时发生错误,或在实例化或初始化 writer 对象时发生错误。

createWriterInstance

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

可以在构造时向插件提供 Object。对象的本质完全由插件决定。

通常情况下,插件将使用类似 return new MyImageWriter(this) 的代码来实现此方法。

参数:
extension - 特定于插件的扩展对象,该对象可为 null
返回:
一个 ImageWriter 实例。
抛出:
IOException - 如果实例化此 writer 的尝试失败。
IllegalArgumentException - 如果 ImageWriter 的构造方法抛出一个 IllegalArgumentException 指示此扩展对象不适合在这里使用。

isOwnWriter

public boolean isOwnWriter(ImageWriter writer)
如果传入的 ImageWriter 对象是与此服务提供者关联的 ImageWriter 的实例,则返回 true

参数:
writer - 一个 ImageWriter 实例。
返回:
如果 writer 可识别,则返回 true
抛出:
IllegalArgumentException - 如果 writernull

getImageReaderSpiNames

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

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

此机制可用于获取将以 ImageWriter 能够理解的结构生成非像素元数据的 ImageReaders(请参见 IIOExtraDataInfo)。通过读取此图像并从使用此方法获取的 ImageReaders 之一获取此数据并将其传给 ImageWriter,客户端程序可读取图像、进行某些修改并写回图像,同时保留所有的元数据,而不需要理解有关此元数据内部结构的任何事情,甚至图像的格式也不需知道。

返回:
一个长度至少为 1 的、包含 ImageReaderSpi 名称的 String 数组,或者返回 null
另请参见:
ImageIO.getImageReader(ImageWriter), ImageReaderSpi.getImageWriterSpiNames()