javax.imageio.plugins.jpeg

java.lang.Object
  继承者 javax.imageio.IIOParam
      继承者 javax.imageio.ImageWriteParam
          继承者 javax.imageio.plugins.jpeg.JPEGImageWriteParam

public class JPEGImageWriteParam
     
extends ImageWriteParam

此类添加了使用内置 JPEG writer 插件时设置 JPEG 量化表和 Huffman 表以及请求为图像计算最佳 Huffman 表的能力。此类的实例将从内置 ImageWritergetDefaultImageWriteParam 方法返回。

这些新增功能的主要目的是允许在编码简写流中使用表的规范。内置 JPEG writer 还将接受普通 ImageWriteParam,在这种情况下,writer 将在内部构造所需的表。

无论是哪种情况,在 ImageWriteParam 中设置的质量对于底层库而言意义都是相同的:1.00 表示全部为 1 的量化表,0.75 表示“标准”量化表(即视觉上无损失量化表),而 0.00 则表示全部为 255 的量化表。

简写流的表常常通过首先写入仅包含表的简写流来指定,在有些应用程序中,这些表是提前准备好的。此类允许直接从客户端代码指定表。

通常,表是在传入 writer 的 IIOMetadata 对象中指定的,这些对象中包括的所有表都会写入流中。如果没有在元数据中指定表,则写入简写流。如果元数据中不包括任何表并且也没有在 JPEGImageWriteParam 中指定任何表,则使用“标准”视觉上无损失表编码简写流。当某个简写流必须在没有首先向流中写入任何表的情况下进行写入时,需要使用此类来指定表。要使用此类,传入 writer 的元数据对象不能包含任何表,并且不能提供任何流元数据。有关默认表的更多信息,请参见 JPEGQTableJPEGHuffmanTable

writer 的 getDefaultWriteParam 方法返回的默认 JPEGImageWriteParam 不包含任何表。默认表包括在 writer 返回的默认 IIOMetadata 对象中。

如果元数据包含表,则忽略 JPEGImageWriteParam 中给定的表。此外,写入一组表后,只有元数据中的表可以重写它们来进行后续写入,不管写入相同的流还是不同的流。为了使用此类指定新表,必须调用 writer 的 reset 方法。

有关内置 JPEG 插件的操作的更新信息,请参见 JPEG metadata format specification and usage notes


字段摘要
 
从类 javax.imageio.ImageWriteParam 继承的字段
canOffsetTiles, canWriteCompressed, canWriteProgressive, canWriteTiles, compressionMode, compressionQuality, compressionType, compressionTypes, locale, MODE_COPY_FROM_METADATA, MODE_DEFAULT, MODE_DISABLED, MODE_EXPLICIT, preferredTileSizes, progressiveMode, tileGridXOffset, tileGridYOffset, tileHeight, tileWidth, tilingMode, tilingSet
 
从类 javax.imageio.IIOParam 继承的字段
controller, defaultController, destinationOffset, destinationType, sourceBands, sourceRegion, sourceXSubsampling, sourceYSubsampling, subsamplingXOffset, subsamplingYOffset
 
构造方法摘要
JPEGImageWriteParam(Locale locale)
          构造一个 JPEGImageWriteParam
 
方法摘要
 boolean areTablesSet()
          如果表是当前设置的,则返回 true
 JPEGHuffmanTable[] getACHuffmanTables()
          返回最近一次调用 setEncodeTables 设置的 AC Huffman 表所组成数组的一个副本;如果当前没有设置表,则返回 null
 String[] getCompressionQualityDescriptions()
          返回一个 String 数组,可作为用户界面的一部分与 getCompressionQualityValues 一起使用,以设置或显示压缩质量级别。
 float[] getCompressionQualityValues()
          返回一个 float 数组,可作为用户界面的一部分与 getCompressionQualityDescriptions 一起使用,以设置或显示压缩质量级别。
 JPEGHuffmanTable[] getDCHuffmanTables()
          返回最近一次调用 setEncodeTables 设置的 DC Huffman 表所组成数组的一个副本;如果当前没有设置表,则返回 null
 boolean getOptimizeHuffmanTables()
          返回传入对 setOptimizeHuffmanTables 的最近一次调用中的值;如果从未调用 setOptimizeHuffmanTables,则返回 false
 JPEGQTable[] getQTables()
          返回最近一次调用 setEncodeTables 设置的量化表所组成数组的一个副本;如果当前没有设置表,则返回 null
 boolean isCompressionLossless()
          返回 false,因为 JPEG 插件仅支持有损失的压缩。
 void setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables)
          设置量化表和 Huffman 表以在编码简写流中使用。
 void setOptimizeHuffmanTables(boolean optimize)
          告知 writer 是否作为写入过程的一部分为图像生成最佳 Huffman 表。
 void unsetCompression()
          移除所有以前的压缩质量设置值。
 void unsetEncodeTables()
          移除当前设置的所有量化表和 Huffman 表。
 
从类 javax.imageio.ImageWriteParam 继承的方法
canOffsetTiles, canWriteCompressed, canWriteProgressive, canWriteTiles, getBitRate, getCompressionMode, getCompressionQuality, getCompressionType, getCompressionTypes, getLocale, getLocalizedCompressionTypeName, getPreferredTileSizes, getProgressiveMode, getTileGridXOffset, getTileGridYOffset, getTileHeight, getTileWidth, getTilingMode, setCompressionMode, setCompressionQuality, setCompressionType, setProgressiveMode, setTiling, setTilingMode, unsetTiling
 
从类 javax.imageio.IIOParam 继承的方法
activateController, getController, getDefaultController, getDestinationOffset, getDestinationType, getSourceBands, getSourceRegion, getSourceXSubsampling, getSourceYSubsampling, getSubsamplingXOffset, getSubsamplingYOffset, hasController, setController, setDestinationOffset, setDestinationType, setSourceBands, setSourceRegion, setSourceSubsampling
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

JPEGImageWriteParam

public JPEGImageWriteParam(Locale locale)
构造一个 JPEGImageWriteParam。不支持平铺。支持逐步编码。默认的逐步模式为 MODE_DISABLED。支持名为 "JPEG" 的单个压缩形式。默认的压缩质量为 0.75。

参数:
locale - 要由超类用于本地化压缩类型名称和质量描述的 Locale,或者为 null
方法详细信息

unsetCompression

public void unsetCompression()
移除所有以前的压缩质量设置值。

默认实现将压缩质量重置为 0.75F

覆盖:
ImageWriteParam 中的 unsetCompression
抛出:
IllegalStateException - 如果压缩模式不是 MODE_EXPLICIT
另请参见:
ImageWriteParam.setCompressionType(java.lang.String), ImageWriteParam.setCompressionQuality(float)

isCompressionLossless

public boolean isCompressionLossless()
返回 false,因为 JPEG 插件仅支持有损失的压缩。

覆盖:
ImageWriteParam 中的 isCompressionLossless
返回:
false
抛出:
IllegalStateException - 如果压缩模式不是 MODE_EXPLICIT

getCompressionQualityDescriptions

public String[] getCompressionQualityDescriptions()
从类 ImageWriteParam 复制的描述
返回一个 String 数组,可作为用户界面的一部分与 getCompressionQualityValues 一起使用,以设置或显示压缩质量级别。索引为 iString 提供对质量级别范围的描述,该范围在 getCompressionQualityValues[i]getCompressionQualityValues[i + 1] 之间。注意,从 getCompressionQualityValues 返回的数组长度将总是大于从 getCompressionQualityDescriptions 返回的数组长度。

例如,字符串 "Good"、"Better" 和 "Best" 可以与范围 [0, .33)[.33, .66)[.66, 1.0] 关联。在这种情况下,getCompressionQualityDescriptions 将返回 { "Good", "Better", "Best" }getCompressionQualityValues 将返回 { 0.0F, .33F, .66F, 1.0F }

如果没有描述可用,则返回 null。如果从 getCompressionQualityValues 返回 null,则此方法也必须返回 null

应该为由 getLocale 返回的 Locale 将描述本地化,如果 Locale 为非 null 的话。

如果有多个压缩类型,但没有设置任何一种压缩类型,则抛出 IllegalStateException

默认实现检查是否支持压缩,以及压缩模式是否为 MODE_EXPLICIT。如果是这样,而 getCompressionTypes()nullgetCompressionType() 为非 null,则返回 null

覆盖:
ImageWriteParam 中的 getCompressionQualityDescriptions
返回:
包含压缩质量级别的本地化描述的 String 数组。
另请参见:
ImageWriteParam.getCompressionQualityValues()

getCompressionQualityValues

public float[] getCompressionQualityValues()
从类 ImageWriteParam 复制的描述
返回一个 float 数组,可作为用户界面的一部分与 getCompressionQualityDescriptions 一起使用,以设置或显示压缩质量级别。有关更多信息,请参阅 getCompressionQualityDescriptions

如果没有描述可用,则返回 null。如果从 getCompressionQualityDescriptions 返回 null,则此方法也必须返回 null

如果有多个压缩类型,但没有设置任何一种压缩类型,则抛出 IllegalStateException

默认实现检查是否支持压缩,以及压缩模式是否为 MODE_EXPLICIT。如果是这样,而 getCompressionTypes()nullgetCompressionType() 为非 null,则返回 null

覆盖:
ImageWriteParam 中的 getCompressionQualityValues
返回:
一个 float 数组,指示 getCompressionQualityDescriptions 中的 String 描述的压缩质量级别之间的分界线。
另请参见:
ImageWriteParam.getCompressionQualityDescriptions()

areTablesSet

public boolean areTablesSet()
如果表是当前设置的,则返回 true

返回:
如果表存在,则返回 true

setEncodeTables

public void setEncodeTables(JPEGQTable[] qTables,
                            JPEGHuffmanTable[] DCHuffmanTables,
                            JPEGHuffmanTable[] ACHuffmanTables)
设置量化表和 Huffman 表以在编码简写流中使用。每个类型可能至多有 4 个表。如果在元数据中指定了表,则忽略这些表。所有参数都必须为非 null。两个 Huffman 表的数组必须具有相同的元素数。假定元数据中的帧和扫描标题的表说明符等效于这些数组中的索引。使用此方法复制参数数组。

参数:
qTables - 量化表对象所组成的数组。
DCHuffmanTables - Huffman 表对象所组成的数组。
ACHuffmanTables - Huffman 表对象所组成的数组。
抛出:
IllegalArgumentException - 如果这些参数中的任何一个为 null 或者具有 4 个以上的元素,或者 DC 和 AC 的表数不同。
另请参见:
unsetEncodeTables()

unsetEncodeTables

public void unsetEncodeTables()
移除当前设置的所有量化表和 Huffman 表。

另请参见:
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])

getQTables

public JPEGQTable[] getQTables()
返回最近一次调用 setEncodeTables 设置的量化表所组成数组的一个副本;如果当前没有设置表,则返回 null

返回:
JPEGQTable 对象所组成的数组;或者 null
另请参见:
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])

getDCHuffmanTables

public JPEGHuffmanTable[] getDCHuffmanTables()
返回最近一次调用 setEncodeTables 设置的 DC Huffman 表所组成数组的一个副本;如果当前没有设置表,则返回 null

返回:
JPEGHuffmanTable 对象所组成的数组;或者 null
另请参见:
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])

getACHuffmanTables

public JPEGHuffmanTable[] getACHuffmanTables()
返回最近一次调用 setEncodeTables 设置的 AC Huffman 表所组成数组的一个副本;如果当前没有设置表,则返回 null

返回:
JPEGHuffmanTable 对象所组成的数组;或者 null
另请参见:
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])

setOptimizeHuffmanTables

public void setOptimizeHuffmanTables(boolean optimize)
告知 writer 是否作为写入过程的一部分为图像生成最佳 Huffman 表。默认值为 false。如果将此标志设置为 true,则其重写在元数据中指定的所有表。注意,这意味着通过将此标志设置为 true 而写入的任何图像总是包含 Huffman 表。

参数:
optimize - 一个 boolean 值,指示是否在写入时生成最佳 Huffman 表。
另请参见:
getOptimizeHuffmanTables()

getOptimizeHuffmanTables

public boolean getOptimizeHuffmanTables()
返回传入对 setOptimizeHuffmanTables 的最近一次调用中的值;如果从未调用 setOptimizeHuffmanTables,则返回 false

返回:
如果 writer 将生成最佳 Huffman 表,则返回 true
另请参见:
setOptimizeHuffmanTables(boolean)