- java.lang.Object
-
- javax.imageio.IIOParam
-
- javax.imageio.ImageWriteParam
-
- javax.imageio.plugins.jpeg.JPEGImageWriteParam
-
public class JPEGImageWriteParam extends ImageWriteParam
该类增加了在使用内置JPEG writer插件时设置JPEG量化和霍夫曼表的能力,并请求为图像计算优化的霍夫曼表。 该类的一个实例将从内置的JPEGImageWriter
的getDefaultImageWriteParam
方法中返回。这些添加的主要目的是允许表的规范用于编码缩写的流。 内置的JPEG作者也会接受普通的
ImageWriteParam
,在这种情况下,作者将在内部构建必要的表格。在任一情况下,
ImageWriteParam
的质量设置与底层库具有相同的含义:1.00表示全部1的量化表,0.75表示“标准”,视觉无损量化表,0.00表示全部255的浓缩表。虽然缩写流的表格通常首先编写仅包含表格的缩写流来指定,但在某些应用程序中,表格提前固定。 该类允许从客户端代码直接指定表。
通常,这些表在传递给写入程序的
IIOMetadata
对象中指定,并且这些对象中包含的任何表都将写入流中。 如果在元数据中没有指定表,则会写入一个缩写的流。 如果元数据中没有表,而在JPEGImageWriteParam
没有指定表,则使用“标准”视觉无损表编码缩写流。 当必须写入缩写流,而不首先向流中写入任何表时,必须使用此类来指定表。 为了使用这个类,传递给写入程序的元数据对象不能包含任何表,也不能提供流元数据。 有关默认表的更多信息,请参阅JPEGQTable
和JPEGHuffmanTable
。默认
JPEGImageWriteParam
由返回getDefaultWriteParam
作家的方法不包含表。 默认表包含在作者返回的默认IIOMetadata
对象中。如果元数据包含表,则忽略
JPEGImageWriteParam
中给出的表。 此外,一旦写入了一组表,只有元数据中的表可以覆盖它们以用于后续写入,无论是相同的流还是不同的。 为了使用这个类来指定新的表,必须调用writer的reset
方法。有关内置JPEG插件的操作的详细信息,请参阅JPEG metadata format specification and usage notes 。
-
-
Field Summary
-
Fields inherited from class javax.imageio.IIOParam
controller, defaultController, destinationOffset, destinationType, sourceBands, sourceRegion, sourceXSubsampling, sourceYSubsampling, subsamplingXOffset, subsamplingYOffset
-
Fields inherited from class 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
-
-
构造方法摘要
构造方法 Constructor 描述 JPEGImageWriteParam(Locale locale)
构造一个JPEGImageWriteParam
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
areTablesSet()
如果表当前设置,则返回true
。JPEGHuffmanTable[]
getACHuffmanTables()
返回在最近调用setEncodeTables
或null
如果表当前未设置)时设置的AC Huffman表数组的副本。String[]
getCompressionQualityDescriptions()
返回String
的数组,可以与getCompressionQualityValues
一起使用,作为设置或显示压缩质量等级的用户界面的一部分。float[]
getCompressionQualityValues()
返回float
的数组,可以与getCompressionQualityDescriptions
一起使用,作为设置或显示压缩质量等级的用户界面的一部分。JPEGHuffmanTable[]
getDCHuffmanTables()
返回在最近调用setEncodeTables
或null
如果表当前未设置)时设置的DC Huffman表数组的副本。boolean
getOptimizeHuffmanTables()
返回传递到最近一次调用值setOptimizeHuffmanTables
,或者false
如果setOptimizeHuffmanTables
从未被调用。JPEGQTable[]
getQTables()
返回最近调用setEncodeTables
设置的量化表数组的副本,如果表当前未设置,则null
。boolean
isCompressionLossless()
返回false
因为JPEG插件仅支持有损压缩。void
setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables)
设置用于编码缩写流的量化和霍夫曼表。void
setOptimizeHuffmanTables(boolean optimize)
告诉作者为写入过程的一部分,为图像生成优化的霍夫曼表。void
unsetCompression()
删除任何以前的压缩质量设置。void
unsetEncodeTables()
删除当前设置的任何量化和霍夫曼表。-
Methods inherited from class javax.imageio.IIOParam
activateController, getController, getDefaultController, getDestinationOffset, getDestinationType, getSourceBands, getSourceRegion, getSourceXSubsampling, getSourceYSubsampling, getSubsamplingXOffset, getSubsamplingYOffset, hasController, setController, setDestinationOffset, setDestinationType, setSourceBands, setSourceRegion, setSourceSubsampling
-
Methods inherited from class 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
-
-
-
-
构造方法详细信息
-
JPEGImageWriteParam
public JPEGImageWriteParam(Locale locale)
构造一个JPEGImageWriteParam
。 不支持平铺。 支持逐行编码。 默认逐行模式为MODE_DISABLED。 支持单一形式的压缩,名为“JPEG”。 默认压缩质量为0.75。- 参数
-
locale
-一个Locale
由超类用于本地化压缩类型名称和质量描述,或null
。
-
-
方法详细信息
-
unsetCompression
public void unsetCompression()
删除任何以前的压缩质量设置。默认实现将压缩质量重置为
0.75F
。- 重写:
-
unsetCompression
在ImageWriteParam
- 异常
-
IllegalStateException
- 如果压缩模式不是MODE_EXPLICIT
。 - 另请参见:
-
ImageWriteParam.setCompressionType(java.lang.String)
,ImageWriteParam.setCompressionQuality(float)
-
isCompressionLossless
public boolean isCompressionLossless()
返回false
因为JPEG插件仅支持有损压缩。- 重写:
-
isCompressionLossless
ImageWriteParam
- 结果
-
false
。 - 异常
-
IllegalStateException
- 如果压缩模式不是MODE_EXPLICIT
。
-
getCompressionQualityDescriptions
public String[] getCompressionQualityDescriptions()
描述从类别复制ImageWriteParam
返回String
的数组,可以与getCompressionQualityValues
一起使用,作为设置或显示压缩质量等级的用户界面的一部分。 所述String
具有索引i
提供质量水平之间的范围内的描述getCompressionQualityValues[i]
和getCompressionQualityValues[i + 1]
。 需要注意的是阵列的长度从返回getCompressionQualityValues
将始终是一个大于从返回getCompressionQualityDescriptions
。作为一个例子,字符串“好”,“较好”和“最佳”可与范围相关
[0, .33)
,[.33, .66)
,并[.66, 1.0]
。 在这种情况下,getCompressionQualityDescriptions
将返回{ "Good", "Better", "Best" }
而getCompressionQualityValues
将返回{ 0.0F, .33F, .66F, 1.0F }
。如果没有可用的描述,则返回
null
。 如果null
从返回getCompressionQualityValues
,这种方法也必须返回null
。该说明应本地化为
Locale
由归国getLocale
,如果它是非null
。如果有多种压缩类型,但没有设置,则抛出一个
IllegalStateException
。默认实现检查压缩是否受支持,压缩模式是否为
MODE_EXPLICIT
。 如果是,如果getCompressionTypes()
是null
或getCompressionType()
是非null
,它将返回null
。- 重写:
-
getCompressionQualityDescriptions
在ImageWriteParam
- 结果
-
String
的数组包含压缩质量等级的本地化描述。 - 另请参见:
-
ImageWriteParam.getCompressionQualityValues()
-
getCompressionQualityValues
public float[] getCompressionQualityValues()
描述从类复制:ImageWriteParam
返回float
的数组,可以与getCompressionQualityDescriptions
一起使用,作为设置或显示压缩质量级别的用户界面的一部分。 有关详细信息,请参阅getCompressionQualityDescriptions
。如果没有可用的描述,则返回
null
。 如果null
从返回getCompressionQualityDescriptions
,这种方法也必须返回null
。如果有多种压缩类型,但没有设置,则抛出一个
IllegalStateException
。默认实现检查压缩是否受支持,而压缩模式是
MODE_EXPLICIT
。 如果是,如果getCompressionTypes()
是null
或getCompressionType()
是非null
,它返回null
。- 重写:
-
getCompressionQualityValues
在ImageWriteParam
- 结果
-
float
s的阵列表示String
s从getCompressionQualityDescriptions
描述的压缩质量水平之间的边界。 - 另请参见:
-
ImageWriteParam.getCompressionQualityDescriptions()
-
areTablesSet
public boolean areTablesSet()
如果表当前设置,则返回true
。- 结果
-
true
如果表存在。
-
setEncodeTables
public void setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables)
设置用于编码缩写流的量化和霍夫曼表。 每种类型最多可能有4个表。 如果在元数据中指定了表,则忽略这些表。 所有参数必须是非null
。 霍夫曼表的两个阵列必须具有相同数量的元素。 假设元数据中的帧和扫描头中的表格符号等同于这些数组中的索引。 参数数组由此方法复制。- 参数
-
qTables
- 量化表对象数组。 -
DCHuffmanTables
- 一组霍夫曼表对象。 -
ACHuffmanTables
- 一组霍夫曼表对象。 - 异常
-
IllegalArgumentException
- 如果任何参数是null
或有多于4个元素,或者DC和AC表的数量不同。 - 另请参见:
-
unsetEncodeTables()
-
unsetEncodeTables
public void unsetEncodeTables()
删除当前设置的任何量化和霍夫曼表。
-
getQTables
public JPEGQTable[] getQTables()
返回最近调用setEncodeTables
或null
如果表当前未设置)设置的量化表数组的副本。
-
getDCHuffmanTables
public JPEGHuffmanTable[] getDCHuffmanTables()
返回在最近调用setEncodeTables
或null
如果表当前未设置)时设置的DC Huffman表数组的副本。- 结果
-
一组
JPEGHuffmanTable
对象,或null
。 - 另请参见:
-
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])
-
getACHuffmanTables
public JPEGHuffmanTable[] getACHuffmanTables()
返回最近调用setEncodeTables
或null
如果表当前未设置)时设置的AC霍夫曼表数组的副本。- 结果
-
一个
JPEGHuffmanTable
对象的数组,或null
。 - 另请参见:
-
setEncodeTables(javax.imageio.plugins.jpeg.JPEGQTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[], javax.imageio.plugins.jpeg.JPEGHuffmanTable[])
-
setOptimizeHuffmanTables
public void setOptimizeHuffmanTables(boolean optimize)
告诉作者为写入过程的一部分,为图像生成优化的霍夫曼表。 默认值为false
。 如果此标志设置为true
,它将覆盖元数据中指定的任何表。 请注意,这意味着使用此标志设置为true
任何图像将始终包含霍夫曼表。- 参数
-
optimize
- 一个布尔值,表示写入时是否生成优化的霍夫曼表。 - 另请参见:
-
getOptimizeHuffmanTables()
-
getOptimizeHuffmanTables
public boolean getOptimizeHuffmanTables()
返回传递到最近一次调用值setOptimizeHuffmanTables
,或者false
如果setOptimizeHuffmanTables
从未被调用。- 结果
-
true
如果作者将生成优化的霍夫曼表。 - 另请参见:
-
setOptimizeHuffmanTables(boolean)
-
-