Class GIFImageWriter
- java.lang.Object
-
- javax.imageio.ImageWriter
-
- com.github.jaiimageio.impl.plugins.gif.GIFImageWriter
-
- All Implemented Interfaces:
javax.imageio.ImageTranscoder
public class GIFImageWriter extends javax.imageio.ImageWriter
-
-
Field Summary
Fields Modifier and Type Field Description private static booleanDEBUG(package private) static java.lang.StringIMAGE_METADATA_NAMEprivate intimageIndexThe index of the image being written.private booleanisWritingSequenceWhether a sequence is being written.(package private) static java.lang.StringSTANDARD_METADATA_NAMEprivate javax.imageio.stream.ImageOutputStreamstreamTheoutputcase to anImageOutputStream.(package private) static java.lang.StringSTREAM_METADATA_NAMEprivate GIFWritableStreamMetadatatheStreamMetadataThe stream metadata of a sequence.private booleanwroteSequenceHeaderWhether the header has been written.
-
Constructor Summary
Constructors Constructor Description GIFImageWriter(GIFImageWriterSpi originatingProvider)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanWriteSequence()private static voidcomputeRegions(java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam p)Compute the source region and destination dimensions taking any parameter settings into account.javax.imageio.metadata.IIOMetadataconvertImageMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)Creates a default image metadata object and merges in the supplied metadata.private voidconvertMetadata(java.lang.String metadataFormatName, javax.imageio.metadata.IIOMetadata inData, javax.imageio.metadata.IIOMetadata outData)MergesinDataintooutData.javax.imageio.metadata.IIOMetadataconvertStreamMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)Creates a default stream metadata object and merges in the supplied metadata.private static byte[]createColorTable(java.awt.image.ColorModel colorModel, java.awt.image.SampleModel sampleModel)Create a color table from the image ColorModel and SampleModel.voidendWriteSequence()javax.imageio.metadata.IIOMetadatagetDefaultImageMetadata(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)javax.imageio.metadata.IIOMetadatagetDefaultStreamMetadata(javax.imageio.ImageWriteParam param)javax.imageio.ImageWriteParamgetDefaultWriteParam()private static intgetGifPaletteSize(int x)According do GIF specification size of clor table (palette here) must be in range from 2 to 256 and must be power of 2.private static intgetNumBits(int value)The number of bits represented by the value which should be a legal length for a color table.private booleanneedToCreateIndex(java.awt.image.RenderedImage image)voidprepareWriteSequence(javax.imageio.metadata.IIOMetadata streamMetadata)voidreset()private voidresetLocal()Resets locally defined instance variables.voidsetOutput(java.lang.Object output)private voidwrite(boolean writeHeader, boolean writeTrailer, javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)Writes any extension blocks, the Image Descriptor, the image data, and optionally the header (Signature and Logical Screen Descriptor) and trailer (Block Terminator).voidwrite(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)private voidwriteApplicationExtension(GIFWritableImageMetadata im)private voidwriteBlocks(byte[] data)private voidwriteCommentExtension(GIFWritableImageMetadata im)private voidwriteGraphicControlExtension(int disposalMethod, boolean userInputFlag, boolean transparentColorFlag, int delayTime, int transparentColorIndex)private voidwriteGraphicControlExtension(GIFWritableImageMetadata im)private voidwriteHeader(java.lang.String version, int logicalScreenWidth, int logicalScreenHeight, int colorResolution, int pixelAspectRatio, int backgroundColorIndex, boolean sortFlag, int bitsPerPixel, byte[] globalColorTable)private voidwriteHeader(javax.imageio.metadata.IIOMetadata streamMetadata, int bitsPerPixel)private voidwriteImage(java.awt.image.RenderedImage image, GIFWritableImageMetadata imageMetadata, javax.imageio.ImageWriteParam param, byte[] globalColorTable, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize)Writes any extension blocks, the Image Descriptor, and the image dataprivate voidwriteImageDescriptor(int imageLeftPosition, int imageTopPosition, int imageWidth, int imageHeight, boolean interlaceFlag, boolean sortFlag, int bitsPerPixel, byte[] localColorTable)private voidwriteImageDescriptor(GIFWritableImageMetadata imageMetadata, int bitsPerPixel)private voidwritePlainTextExtension(GIFWritableImageMetadata im)private voidwriteRasterData(java.awt.image.RenderedImage image, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam param, boolean interlaceFlag)private voidwriteRows(java.awt.image.RenderedImage image, LZWCompressor compressor, int sx, int sdx, int sy, int sdy, int sw, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod)private voidwriteRowsOpt(byte[] data, int offset, int lineStride, LZWCompressor compressor, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod)voidwriteToSequence(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)private voidwriteTrailer()-
Methods inherited from class javax.imageio.ImageWriter
abort, abortRequested, addIIOWriteProgressListener, addIIOWriteWarningListener, canInsertEmpty, canInsertImage, canRemoveImage, canReplaceImageMetadata, canReplacePixels, canReplaceStreamMetadata, canWriteEmpty, canWriteRasters, clearAbortRequest, dispose, endInsertEmpty, endReplacePixels, endWriteEmpty, getAvailableLocales, getLocale, getNumThumbnailsSupported, getOriginatingProvider, getOutput, getPreferredThumbnailSizes, prepareInsertEmpty, prepareReplacePixels, prepareWriteEmpty, processImageComplete, processImageProgress, processImageStarted, processThumbnailComplete, processThumbnailProgress, processThumbnailStarted, processWarningOccurred, processWarningOccurred, processWriteAborted, removeAllIIOWriteProgressListeners, removeAllIIOWriteWarningListeners, removeIIOWriteProgressListener, removeIIOWriteWarningListener, removeImage, replaceImageMetadata, replacePixels, replacePixels, replaceStreamMetadata, setLocale, write, write, writeInsert
-
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
- See Also:
- Constant Field Values
-
STANDARD_METADATA_NAME
static final java.lang.String STANDARD_METADATA_NAME
- See Also:
- Constant Field Values
-
STREAM_METADATA_NAME
static final java.lang.String STREAM_METADATA_NAME
- See Also:
- Constant Field Values
-
IMAGE_METADATA_NAME
static final java.lang.String IMAGE_METADATA_NAME
- See Also:
- Constant Field Values
-
stream
private javax.imageio.stream.ImageOutputStream stream
Theoutputcase to anImageOutputStream.
-
isWritingSequence
private boolean isWritingSequence
Whether a sequence is being written.
-
wroteSequenceHeader
private boolean wroteSequenceHeader
Whether the header has been written.
-
theStreamMetadata
private GIFWritableStreamMetadata theStreamMetadata
The stream metadata of a sequence.
-
imageIndex
private int imageIndex
The index of the image being written.
-
-
Constructor Detail
-
GIFImageWriter
public GIFImageWriter(GIFImageWriterSpi originatingProvider)
-
-
Method Detail
-
getNumBits
private static int getNumBits(int value) throws java.io.IOExceptionThe number of bits represented by the value which should be a legal length for a color table.- Throws:
java.io.IOException
-
computeRegions
private static void computeRegions(java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam p)Compute the source region and destination dimensions taking any parameter settings into account.
-
createColorTable
private static byte[] createColorTable(java.awt.image.ColorModel colorModel, java.awt.image.SampleModel sampleModel)Create a color table from the image ColorModel and SampleModel.
-
getGifPaletteSize
private static int getGifPaletteSize(int x)
According do GIF specification size of clor table (palette here) must be in range from 2 to 256 and must be power of 2.
-
canWriteSequence
public boolean canWriteSequence()
- Overrides:
canWriteSequencein classjavax.imageio.ImageWriter
-
convertMetadata
private void convertMetadata(java.lang.String metadataFormatName, javax.imageio.metadata.IIOMetadata inData, javax.imageio.metadata.IIOMetadata outData)MergesinDataintooutData. The supplied metadata format name is attempted first and failing that the standard metadata format name is attempted.
-
convertStreamMetadata
public javax.imageio.metadata.IIOMetadata convertStreamMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)Creates a default stream metadata object and merges in the supplied metadata.- Specified by:
convertStreamMetadatain interfacejavax.imageio.ImageTranscoder- Specified by:
convertStreamMetadatain classjavax.imageio.ImageWriter
-
convertImageMetadata
public javax.imageio.metadata.IIOMetadata convertImageMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)Creates a default image metadata object and merges in the supplied metadata.- Specified by:
convertImageMetadatain interfacejavax.imageio.ImageTranscoder- Specified by:
convertImageMetadatain classjavax.imageio.ImageWriter
-
endWriteSequence
public void endWriteSequence() throws java.io.IOException- Overrides:
endWriteSequencein classjavax.imageio.ImageWriter- Throws:
java.io.IOException
-
getDefaultImageMetadata
public javax.imageio.metadata.IIOMetadata getDefaultImageMetadata(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)- Specified by:
getDefaultImageMetadatain classjavax.imageio.ImageWriter
-
getDefaultStreamMetadata
public javax.imageio.metadata.IIOMetadata getDefaultStreamMetadata(javax.imageio.ImageWriteParam param)
- Specified by:
getDefaultStreamMetadatain classjavax.imageio.ImageWriter
-
getDefaultWriteParam
public javax.imageio.ImageWriteParam getDefaultWriteParam()
- Overrides:
getDefaultWriteParamin classjavax.imageio.ImageWriter
-
prepareWriteSequence
public void prepareWriteSequence(javax.imageio.metadata.IIOMetadata streamMetadata) throws java.io.IOException- Overrides:
prepareWriteSequencein classjavax.imageio.ImageWriter- Throws:
java.io.IOException
-
reset
public void reset()
- Overrides:
resetin classjavax.imageio.ImageWriter
-
resetLocal
private void resetLocal()
Resets locally defined instance variables.
-
setOutput
public void setOutput(java.lang.Object output)
- Overrides:
setOutputin classjavax.imageio.ImageWriter
-
write
public void write(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p) throws java.io.IOException- Specified by:
writein classjavax.imageio.ImageWriter- Throws:
java.io.IOException
-
writeToSequence
public void writeToSequence(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param) throws java.io.IOException- Overrides:
writeToSequencein classjavax.imageio.ImageWriter- Throws:
java.io.IOException
-
needToCreateIndex
private boolean needToCreateIndex(java.awt.image.RenderedImage image)
-
write
private void write(boolean writeHeader, boolean writeTrailer, javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p) throws java.io.IOExceptionWrites any extension blocks, the Image Descriptor, the image data, and optionally the header (Signature and Logical Screen Descriptor) and trailer (Block Terminator).- Parameters:
writeHeader- Whether to write the header.writeTrailer- Whether to write the trailer.sm- The stream metadata ornullifwriteHeaderisfalse.iioimage- The image and image metadata.p- The write parameters.- Throws:
java.lang.IllegalArgumentException- if the number of bands is not 1.java.lang.IllegalArgumentException- if the number of bits per sample is greater than 8.java.lang.IllegalArgumentException- if the color component size is greater than 8.java.lang.IllegalArgumentException- ifwriteHeaderistrueandsmisnull.java.lang.IllegalArgumentException- ifwriteHeaderisfalseand a sequence is not being written.java.io.IOException
-
writeImage
private void writeImage(java.awt.image.RenderedImage image, GIFWritableImageMetadata imageMetadata, javax.imageio.ImageWriteParam param, byte[] globalColorTable, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize) throws java.io.IOExceptionWrites any extension blocks, the Image Descriptor, and the image data- Parameters:
image- The image.imageMetadata- The Image metadata.param- The write parameters.globalColorTable- The Global Color Table.sourceBounds- The source region.destSize- The destination dimensions.- Throws:
java.io.IOException
-
writeRows
private void writeRows(java.awt.image.RenderedImage image, LZWCompressor compressor, int sx, int sdx, int sy, int sdy, int sw, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod) throws java.io.IOException- Throws:
java.io.IOException
-
writeRowsOpt
private void writeRowsOpt(byte[] data, int offset, int lineStride, LZWCompressor compressor, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod) throws java.io.IOException- Throws:
java.io.IOException
-
writeRasterData
private void writeRasterData(java.awt.image.RenderedImage image, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam param, boolean interlaceFlag) throws java.io.IOException- Throws:
java.io.IOException
-
writeHeader
private void writeHeader(java.lang.String version, int logicalScreenWidth, int logicalScreenHeight, int colorResolution, int pixelAspectRatio, int backgroundColorIndex, boolean sortFlag, int bitsPerPixel, byte[] globalColorTable) throws java.io.IOException- Throws:
java.io.IOException
-
writeHeader
private void writeHeader(javax.imageio.metadata.IIOMetadata streamMetadata, int bitsPerPixel) throws java.io.IOException- Throws:
java.io.IOException
-
writeGraphicControlExtension
private void writeGraphicControlExtension(int disposalMethod, boolean userInputFlag, boolean transparentColorFlag, int delayTime, int transparentColorIndex) throws java.io.IOException- Throws:
java.io.IOException
-
writeGraphicControlExtension
private void writeGraphicControlExtension(GIFWritableImageMetadata im) throws java.io.IOException
- Throws:
java.io.IOException
-
writeBlocks
private void writeBlocks(byte[] data) throws java.io.IOException- Throws:
java.io.IOException
-
writePlainTextExtension
private void writePlainTextExtension(GIFWritableImageMetadata im) throws java.io.IOException
- Throws:
java.io.IOException
-
writeApplicationExtension
private void writeApplicationExtension(GIFWritableImageMetadata im) throws java.io.IOException
- Throws:
java.io.IOException
-
writeCommentExtension
private void writeCommentExtension(GIFWritableImageMetadata im) throws java.io.IOException
- Throws:
java.io.IOException
-
writeImageDescriptor
private void writeImageDescriptor(int imageLeftPosition, int imageTopPosition, int imageWidth, int imageHeight, boolean interlaceFlag, boolean sortFlag, int bitsPerPixel, byte[] localColorTable) throws java.io.IOException- Throws:
java.io.IOException
-
writeImageDescriptor
private void writeImageDescriptor(GIFWritableImageMetadata imageMetadata, int bitsPerPixel) throws java.io.IOException
- Throws:
java.io.IOException
-
writeTrailer
private void writeTrailer() throws java.io.IOException- Throws:
java.io.IOException
-
-