java.lang.Object javax.imageio.IIOParam javax.imageio.ImageWriteParam javax.imageio.plugins.jpeg.JPEGImageWriteParam
public class JPEGImageWriteParam
此类添加了使用内置 JPEG writer 插件时设置 JPEG 量化表和 Huffman 表以及请求为图像计算最佳 Huffman 表的能力。此类的实例将从内置 ImageWriter
的 getDefaultImageWriteParam
方法返回。
这些新增功能的主要目的是允许在编码简写流中使用表的规范。内置 JPEG writer 还将接受普通 ImageWriteParam
,在这种情况下,writer 将在内部构造所需的表。
无论是哪种情况,在 ImageWriteParam
中设置的质量对于底层库而言意义都是相同的:1.00 表示全部为 1 的量化表,0.75 表示“标准”量化表(即视觉上无损失量化表),而 0.00 则表示全部为 255 的量化表。
简写流的表常常通过首先写入仅包含表的简写流来指定,在有些应用程序中,这些表是提前准备好的。此类允许直接从客户端代码指定表。
通常,表是在传入 writer 的 IIOMetadata
对象中指定的,这些对象中包括的所有表都会写入流中。如果没有在元数据中指定表,则写入简写流。如果元数据中不包括任何表并且也没有在 JPEGImageWriteParam
中指定任何表,则使用“标准”视觉上无损失表编码简写流。当某个简写流必须在没有首先向流中写入任何表的情况下进行写入时,需要使用此类来指定表。要使用此类,传入 writer 的元数据对象不能包含任何表,并且不能提供任何流元数据。有关默认表的更多信息,请参见
和 JPEGQTable
。 JPEGHuffmanTable
writer 的 getDefaultWriteParam
方法返回的默认 JPEGImageWriteParam
不包含任何表。默认表包括在 writer 返回的默认 IIOMetadata
对象中。
如果元数据包含表,则忽略 JPEGImageWriteParam
中给定的表。此外,写入一组表后,只有元数据中的表可以重写它们来进行后续写入,不管写入相同的流还是不同的流。为了使用此类指定新表,必须调用 writer 的
方法。 reset
有关内置 JPEG 插件的操作的更新信息,请参见 JPEG metadata format specification and usage notes。
字段摘要 |
---|
从类 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 表。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public JPEGImageWriteParam(Locale locale)
JPEGImageWriteParam
。不支持平铺。支持逐步编码。默认的逐步模式为 MODE_DISABLED。支持名为 "JPEG" 的单个压缩形式。默认的压缩质量为 0.75。
locale
- 要由超类用于本地化压缩类型名称和质量描述的
Locale
,或者为
null
。
方法详细信息 |
---|
public void unsetCompression()
默认实现将压缩质量重置为 0.75F
。
ImageWriteParam
中的
unsetCompression
IllegalStateException
- 如果压缩模式不是
MODE_EXPLICIT
。
ImageWriteParam.setCompressionType(java.lang.String)
,
ImageWriteParam.setCompressionQuality(float)
public boolean isCompressionLossless()
false
,因为 JPEG 插件仅支持有损失的压缩。
ImageWriteParam
中的
isCompressionLossless
false
。
IllegalStateException
- 如果压缩模式不是
MODE_EXPLICIT
。
public String[] getCompressionQualityDescriptions()
ImageWriteParam
复制的描述
String
数组,可作为用户界面的一部分与
getCompressionQualityValues
一起使用,以设置或显示压缩质量级别。索引为
i
的
String
提供对质量级别范围的描述,该范围在
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()
为 null
或 getCompressionType()
为非 null
,则返回 null
。
String
数组。
ImageWriteParam.getCompressionQualityValues()
public float[] getCompressionQualityValues()
ImageWriteParam
复制的描述
float
数组,可作为用户界面的一部分与
getCompressionQualityDescriptions
一起使用,以设置或显示压缩质量级别。有关更多信息,请参阅
getCompressionQualityDescriptions
。
如果没有描述可用,则返回 null
。如果从 getCompressionQualityDescriptions
返回 null
,则此方法也必须返回 null
。
如果有多个压缩类型,但没有设置任何一种压缩类型,则抛出 IllegalStateException
。
默认实现检查是否支持压缩,以及压缩模式是否为 MODE_EXPLICIT
。如果是这样,而 getCompressionTypes()
为 null
或 getCompressionType()
为非 null
,则返回 null
。
float
数组,指示
getCompressionQualityDescriptions
中的
String
描述的压缩质量级别之间的分界线。
ImageWriteParam.getCompressionQualityDescriptions()
public boolean areTablesSet()
true
。
true
。
public void setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables)
null
。两个 Huffman 表的数组必须具有相同的元素数。假定元数据中的帧和扫描标题的表说明符等效于这些数组中的索引。使用此方法复制参数数组。
qTables
- 量化表对象所组成的数组。
DCHuffmanTables
- Huffman 表对象所组成的数组。
ACHuffmanTables
- Huffman 表对象所组成的数组。
IllegalArgumentException
- 如果这些参数中的任何一个为
null
或者具有 4 个以上的元素,或者 DC 和 AC 的表数不同。
unsetEncodeTables()
public void unsetEncodeTables()
public JPEGQTable[] getQTables()
setEncodeTables
设置的量化表所组成数组的一个副本;如果当前没有设置表,则返回
null
。
JPEGQTable
对象所组成的数组;或者
null
。
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])
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[])
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[])
public void setOptimizeHuffmanTables(boolean optimize)
false
。如果将此标志设置为
true
,则其重写在元数据中指定的所有表。注意,这意味着通过将此标志设置为
true
而写入的任何图像总是包含 Huffman 表。
optimize
- 一个 boolean 值,指示是否在写入时生成最佳 Huffman 表。
getOptimizeHuffmanTables()
public boolean getOptimizeHuffmanTables()
setOptimizeHuffmanTables
的最近一次调用中的值;如果从未调用
setOptimizeHuffmanTables
,则返回
false
。
true
。
setOptimizeHuffmanTables(boolean)