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 boolean
DEBUG
(package private) static java.lang.String
IMAGE_METADATA_NAME
private int
imageIndex
The index of the image being written.private boolean
isWritingSequence
Whether a sequence is being written.(package private) static java.lang.String
STANDARD_METADATA_NAME
private javax.imageio.stream.ImageOutputStream
stream
Theoutput
case to anImageOutputStream
.(package private) static java.lang.String
STREAM_METADATA_NAME
private GIFWritableStreamMetadata
theStreamMetadata
The stream metadata of a sequence.private boolean
wroteSequenceHeader
Whether 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 boolean
canWriteSequence()
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.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.private void
convertMetadata(java.lang.String metadataFormatName, javax.imageio.metadata.IIOMetadata inData, javax.imageio.metadata.IIOMetadata outData)
MergesinData
intooutData
.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.private static byte[]
createColorTable(java.awt.image.ColorModel colorModel, java.awt.image.SampleModel sampleModel)
Create a color table from the image ColorModel and SampleModel.void
endWriteSequence()
javax.imageio.metadata.IIOMetadata
getDefaultImageMetadata(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)
javax.imageio.metadata.IIOMetadata
getDefaultStreamMetadata(javax.imageio.ImageWriteParam param)
javax.imageio.ImageWriteParam
getDefaultWriteParam()
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.private static int
getNumBits(int value)
The number of bits represented by the value which should be a legal length for a color table.private boolean
needToCreateIndex(java.awt.image.RenderedImage image)
void
prepareWriteSequence(javax.imageio.metadata.IIOMetadata streamMetadata)
void
reset()
private void
resetLocal()
Resets locally defined instance variables.void
setOutput(java.lang.Object output)
private void
write(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).void
write(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)
private void
writeApplicationExtension(GIFWritableImageMetadata im)
private void
writeBlocks(byte[] data)
private void
writeCommentExtension(GIFWritableImageMetadata im)
private void
writeGraphicControlExtension(int disposalMethod, boolean userInputFlag, boolean transparentColorFlag, int delayTime, int transparentColorIndex)
private void
writeGraphicControlExtension(GIFWritableImageMetadata im)
private void
writeHeader(java.lang.String version, int logicalScreenWidth, int logicalScreenHeight, int colorResolution, int pixelAspectRatio, int backgroundColorIndex, boolean sortFlag, int bitsPerPixel, byte[] globalColorTable)
private void
writeHeader(javax.imageio.metadata.IIOMetadata streamMetadata, int bitsPerPixel)
private void
writeImage(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 void
writeImageDescriptor(int imageLeftPosition, int imageTopPosition, int imageWidth, int imageHeight, boolean interlaceFlag, boolean sortFlag, int bitsPerPixel, byte[] localColorTable)
private void
writeImageDescriptor(GIFWritableImageMetadata imageMetadata, int bitsPerPixel)
private void
writePlainTextExtension(GIFWritableImageMetadata im)
private void
writeRasterData(java.awt.image.RenderedImage image, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam param, boolean interlaceFlag)
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)
private void
writeRowsOpt(byte[] data, int offset, int lineStride, LZWCompressor compressor, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod)
void
writeToSequence(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)
private void
writeTrailer()
-
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
Theoutput
case 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.IOException
The 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:
canWriteSequence
in classjavax.imageio.ImageWriter
-
convertMetadata
private void convertMetadata(java.lang.String metadataFormatName, javax.imageio.metadata.IIOMetadata inData, javax.imageio.metadata.IIOMetadata outData)
MergesinData
intooutData
. 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:
convertStreamMetadata
in interfacejavax.imageio.ImageTranscoder
- Specified by:
convertStreamMetadata
in 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:
convertImageMetadata
in interfacejavax.imageio.ImageTranscoder
- Specified by:
convertImageMetadata
in classjavax.imageio.ImageWriter
-
endWriteSequence
public void endWriteSequence() throws java.io.IOException
- Overrides:
endWriteSequence
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
getDefaultImageMetadata
public javax.imageio.metadata.IIOMetadata getDefaultImageMetadata(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)
- Specified by:
getDefaultImageMetadata
in classjavax.imageio.ImageWriter
-
getDefaultStreamMetadata
public javax.imageio.metadata.IIOMetadata getDefaultStreamMetadata(javax.imageio.ImageWriteParam param)
- Specified by:
getDefaultStreamMetadata
in classjavax.imageio.ImageWriter
-
getDefaultWriteParam
public javax.imageio.ImageWriteParam getDefaultWriteParam()
- Overrides:
getDefaultWriteParam
in classjavax.imageio.ImageWriter
-
prepareWriteSequence
public void prepareWriteSequence(javax.imageio.metadata.IIOMetadata streamMetadata) throws java.io.IOException
- Overrides:
prepareWriteSequence
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
reset
public void reset()
- Overrides:
reset
in classjavax.imageio.ImageWriter
-
resetLocal
private void resetLocal()
Resets locally defined instance variables.
-
setOutput
public void setOutput(java.lang.Object output)
- Overrides:
setOutput
in 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:
write
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
writeToSequence
public void writeToSequence(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
writeToSequence
in 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.IOException
Writes 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 ornull
ifwriteHeader
isfalse
.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
- ifwriteHeader
istrue
andsm
isnull
.java.lang.IllegalArgumentException
- ifwriteHeader
isfalse
and 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.IOException
Writes 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
-
-