java.lang.Object
javax.imageio.IIOParam
javax.imageio.ImageWriteParam
javax.imageio.plugins.jpeg.JPEGImageWriteParam
此类在使用内置JPEG写入器插件时添加了设置JPEG量化和霍夫曼表的功能,并请求为图像计算优化的霍夫曼表。当从内置JPEG
ImageWriter
的getDefaultImageWriteParam
方法返回此类的实例时。
这些添加的主要目的是允许指定用于编码简化流的表。内置JPEG写入器还将接受普通的ImageWriteParam
,在这种情况下,写入器将在内部构造必要的表。
无论哪种情况,ImageWriteParam
中的质量设置与基础库的含义相同:1.00表示所有1的量化表,0.75表示“标准”的视觉无损量化表,0.00表示所有255的量化表。
通常,简化流的表是通过首先编写仅包含表的简化流来指定的,在某些应用程序中,表是提前固定的。此类允许直接从客户端代码指定表。
通常,表是在传递给写入器的IIOMetadata
对象中指定的,并且这些对象中包含的任何表都将写入流。如果在元数据中未指定表,则将编写简化流。如果在元数据中未包含表且在JPEGImageWriteParam
中未指定表,则将使用“标准”视觉无损表对简化流进行编码。当必须在不先向流写入任何表的情况下编写简化流时,需要此类。为了使用此类,传递给写入器的元数据对象必须不包含表,并且不得提供流元数据。有关默认表的更多信息,请参阅JPEGQTable
和JPEGHuffmanTable
。
由写入器的getDefaultWriteParam
方法返回的默认JPEGImageWriteParam
不包含表。默认表包含在写入器返回的默认IIOMetadata
对象中。
如果元数据包含表,则将忽略JPEGImageWriteParam
中给定的表。此外,一旦写入了一组表,只有元数据中的表才能覆盖它们以进行后续写入,无论是到相同流还是到不同流。为了使用此类指定新表,必须调用写入器的reset
方法。
有关内置JPEG插件操作的更多信息,请参阅JPEG元数据格式规范和使用说明。
-
Field Summary
Fields declared in 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
Fields declared in class javax.imageio.IIOParam
controller, defaultController, destinationOffset, destinationType, sourceBands, sourceRegion, sourceXSubsampling, sourceYSubsampling, subsamplingXOffset, subsamplingYOffset
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
如果当前已设置表,则返回true
。返回最近一次调用setEncodeTables
设置的交流霍夫曼表数组的副本,如果当前未设置表,则返回null
。返回最近一次调用setEncodeTables
设置的直流霍夫曼表数组的副本,如果当前未设置表,则返回null
。boolean
返回最近一次调用setOptimizeHuffmanTables
传入的值,如果从未调用过setOptimizeHuffmanTables
,则返回false
。返回最近一次调用setEncodeTables
设置的量化表数组的副本,如果当前未设置表,则返回null
。boolean
返回false
,因为JPEG插件仅支持有损压缩。void
setEncodeTables
(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables) 设置用于编码简化流的量化和霍夫曼表。void
setOptimizeHuffmanTables
(boolean optimize) 告诉写入器在写入过程中为图像生成优化的霍夫曼表。void
删除任何先前的压缩质量设置。void
删除当前设置的任何量化和霍夫曼表。Methods declared in class javax.imageio.ImageWriteParam
canOffsetTiles, canWriteCompressed, canWriteProgressive, canWriteTiles, getBitRate, getCompressionMode, getCompressionQuality, getCompressionQualityDescriptions, getCompressionQualityValues, getCompressionType, getCompressionTypes, getLocale, getLocalizedCompressionTypeName, getPreferredTileSizes, getProgressiveMode, getTileGridXOffset, getTileGridYOffset, getTileHeight, getTileWidth, getTilingMode, setCompressionMode, setCompressionQuality, setCompressionType, setProgressiveMode, setTiling, setTilingMode, unsetTiling
Methods declared in class javax.imageio.IIOParam
activateController, getController, getDefaultController, getDestinationOffset, getDestinationType, getSourceBands, getSourceRegion, getSourceXSubsampling, getSourceYSubsampling, getSubsamplingXOffset, getSubsamplingYOffset, hasController, setController, setDestinationOffset, setDestinationType, setSourceBands, setSourceRegion, setSourceSubsampling
-
Constructor Details
-
JPEGImageWriteParam
构造一个JPEGImageWriteParam
。不支持平铺。支持渐进编码。默认的渐进模式为MODE_DISABLED。支持一种名为“JPEG”的压缩形式。默认的压缩质量为0.75。- 参数:
-
locale
- 用于由超类本地化压缩类型名称和质量描述的Locale
,或null
。
-
-
Method Details
-
unsetCompression
public void unsetCompression()删除任何先前的压缩质量设置。默认实现将压缩质量重置为
0.75F
。- 覆盖:
-
unsetCompression
在类ImageWriteParam
- 抛出:
-
IllegalStateException
- 如果压缩模式不是MODE_EXPLICIT
。 - 参见:
-
isCompressionLossless
public boolean isCompressionLossless()返回false
,因为JPEG插件仅支持有损压缩。- 覆盖:
-
isCompressionLossless
在类ImageWriteParam
- 返回:
-
false
。 - 抛出:
-
IllegalStateException
- 如果压缩模式不是MODE_EXPLICIT
。
-
areTablesSet
public boolean areTablesSet()如果当前已设置表,则返回true
。- 返回:
-
如果存在表,则返回
true
。
-
setEncodeTables
public void setEncodeTables(JPEGQTable[] qTables, JPEGHuffmanTable[] DCHuffmanTables, JPEGHuffmanTable[] ACHuffmanTables) 设置用于编码简化流的量化和霍夫曼表。每种类型最多可以有4个表。如果在元数据中指定了表,则将忽略这些表。所有参数都必须是非null
的。霍夫曼表的两个数组必须具有相同数量的元素。元数据中的帧和扫描头中的表指示符被假定等同于这些数组中的索引。此方法将复制参数数组。- 参数:
-
qTables
- 量化表对象数组。 -
DCHuffmanTables
- 直流霍夫曼表对象数组。 -
ACHuffmanTables
- 交流霍夫曼表对象数组。 - 抛出:
-
IllegalArgumentException
- 如果任何参数为null
或具有超过4个元素,或者直流和交流表的数量不同。 - 参见:
-
unsetEncodeTables
public void unsetEncodeTables()删除当前设置的任何量化和霍夫曼表。- 参见:
-
getQTables
返回最近一次调用setEncodeTables
设置的量化表数组的副本,如果当前未设置表,则返回null
。- 返回:
-
一个
JPEGQTable
对象数组,或null
。 - 参见:
-
getDCHuffmanTables
返回最近一次调用setEncodeTables
设置的直流霍夫曼表数组的副本,如果当前未设置表,则返回null
。- 返回:
-
一个
JPEGHuffmanTable
对象数组,或null
。 - 参见:
-
getACHuffmanTables
返回最近一次调用setEncodeTables
设置的交流霍夫曼表数组的副本,如果当前未设置表,则返回null
。- 返回:
-
一个
JPEGHuffmanTable
对象数组,或null
。 - 参见:
-
setOptimizeHuffmanTables
public void setOptimizeHuffmanTables(boolean optimize) 告诉写入器在写入过程中为图像生成优化的霍夫曼表。默认为false
。如果将此标志设置为true
,它将覆盖元数据中指定的任何表。请注意,这意味着使用将此标志设置为true
的任何图像将始终包含霍夫曼表。- 参数:
-
optimize
- 一个布尔值,指示在写入时是否生成优化的霍夫曼表。 - 参见:
-
getOptimizeHuffmanTables
public boolean getOptimizeHuffmanTables()返回最近一次调用setOptimizeHuffmanTables
时传入的值,如果setOptimizeHuffmanTables
从未被调用,则返回false
。- 返回值:
-
如果编写器将生成优化的Huffman表,则返回
true
。 - 另请参阅:
-