Class TIFFImageWriter
- java.lang.Object
-
- javax.imageio.ImageWriter
-
- com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter
-
- All Implemented Interfaces:
javax.imageio.ImageTranscoder
public class TIFFImageWriter extends javax.imageio.ImageWriter
-
-
Field Summary
Fields Modifier and Type Field Description (package private) int
bitDepth
(package private) char[]
bitsPerSample
(package private) java.nio.ByteOrder
byteOrder
(package private) TIFFColorConverter
colorConverter
(package private) int
compression
static int[]
compressionNumbers
Compression tag values for known compression types.static java.lang.String[]
compressionTypes
Known TIFF compression types.(package private) TIFFCompressor
compressor
private static boolean
DEBUG
static int
DEFAULT_BYTES_PER_STRIP
(package private) static java.lang.String
EXIF_JPEG_COMPRESSION_TYPE
(package private) long
headerPosition
(package private) java.awt.image.RenderedImage
image
(package private) TIFFImageMetadata
imageMetadata
(package private) javax.imageio.ImageTypeSpecifier
imageType
private boolean
inReplacePixelsNest
(package private) boolean
isBilevel
static boolean[]
isCompressionLossless
Lossless flag for known compression types.(package private) boolean
isImageSimple
private boolean
isInsertingEmpty
(package private) boolean
isInverted
(package private) boolean
isRescaling
(package private) boolean
isTiled
private boolean
isWritingEmpty
(package private) boolean
isWritingSequence
(package private) int
nativePhotometricInterpretation
(package private) long
nextIFDPointerPos
(package private) long
nextSpace
(package private) int
numBands
(package private) javax.imageio.ImageWriteParam
param
(package private) int
periodX
(package private) int
periodY
(package private) int
photometricInterpretation
(package private) int
pixelsDone
(package private) int
predictor
private TIFFImageReader
reader
private long[]
replacePixelsByteCounts
private long
replacePixelsByteCountsPosition
private int
replacePixelsIndex
private java.lang.Object
replacePixelsLock
private TIFFImageMetadata
replacePixelsMetadata
private long
replacePixelsOffsetsPosition
private java.awt.Rectangle
replacePixelsRegion
private long[]
replacePixelsTileOffsets
(package private) int
sampleFormat
(package private) int[]
sampleSize
(package private) byte[][]
scale
(package private) byte[]
scale0
(package private) byte[][]
scaleh
(package private) byte[][]
scalel
(package private) int
scalingBitDepth
(package private) int[]
sourceBands
(package private) int
sourceHeight
(package private) int
sourceWidth
(package private) int
sourceXOffset
(package private) int
sourceYOffset
(package private) javax.imageio.stream.ImageOutputStream
stream
(package private) TIFFStreamMetadata
streamMetadata
static java.lang.String[]
TIFFCompressionTypes
Supported TIFF compression types.(package private) int
tileLength
(package private) int
tilesAcross
(package private) int
tilesDown
(package private) int
tileWidth
(package private) int
totalPixels
-
Constructor Summary
Constructors Constructor Description TIFFImageWriter(javax.imageio.spi.ImageWriterSpi originatingProvider)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
canInsertEmpty(int imageIndex)
boolean
canInsertImage(int imageIndex)
boolean
canReplacePixels(int imageIndex)
boolean
canWriteEmpty()
boolean
canWriteSequence()
private void
checkParamsEmpty(javax.imageio.ImageTypeSpecifier imageType, int width, int height, java.util.List thumbnails)
javax.imageio.metadata.IIOMetadata
convertImageMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)
private TIFFImageMetadata
convertNativeImageMetadata(javax.imageio.metadata.IIOMetadata inData)
Converts a nativecom_sun_media_imageio_plugins_tiff_image_1.0
tree to aTIFFImageMetadata
object.private TIFFImageMetadata
convertStandardImageMetadata(javax.imageio.metadata.IIOMetadata inData)
Converts a standardjavax_imageio_1.0
tree to aTIFFImageMetadata
object.javax.imageio.metadata.IIOMetadata
convertStreamMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)
void
dispose()
void
endInsertEmpty()
void
endReplacePixels()
void
endWriteEmpty()
void
endWriteSequence()
private boolean
equals(int[] s0, int[] s1)
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 void
initializeScaleTables(int[] sampleSize)
private void
insert(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param, boolean writeData)
private boolean
isEncodingEmpty()
private void
locateIFD(int imageIndex, long[] ifdpos, long[] ifd)
void
prepareInsertEmpty(int imageIndex, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param)
void
prepareReplacePixels(int imageIndex, java.awt.Rectangle region)
void
prepareWriteEmpty(javax.imageio.metadata.IIOMetadata streamMetadata, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param)
void
prepareWriteSequence(javax.imageio.metadata.IIOMetadata streamMetadata)
private TIFFIFD
readIFD(int imageIndex)
void
replacePixels(java.awt.image.Raster raster, javax.imageio.ImageWriteParam param)
void
replacePixels(java.awt.image.RenderedImage image, javax.imageio.ImageWriteParam param)
void
reset()
void
setOutput(java.lang.Object output)
(package private) void
setupMetadata(java.awt.image.ColorModel cm, java.awt.image.SampleModel sm, int destWidth, int destHeight)
Sets up the output metadata adding, removing, and overriding fields as needed.private java.awt.image.Raster
subsample(java.awt.image.Raster raster, int[] sourceBands, int subOriginX, int subOriginY, int subPeriodX, int subPeriodY, int dstOffsetX, int dstOffsetY, java.awt.Rectangle target)
void
write(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)
private void
write(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p, boolean writeHeader, boolean writeData)
private void
writeHeader()
void
writeInsert(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)
private int
writeTile(java.awt.Rectangle tileRect, TIFFCompressor compressor)
void
writeToSequence(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)
static int
XToTileX(int x, int tileGridXOffset, int tileWidth)
Converts a pixel's X coordinate into a horizontal tile index relative to a given tile grid layout specified by its X offset and tile width.static int
YToTileY(int y, int tileGridYOffset, int tileHeight)
Converts a pixel's Y coordinate into a vertical tile index relative to a given tile grid layout specified by its Y offset and tile height.-
Methods inherited from class javax.imageio.ImageWriter
abort, abortRequested, addIIOWriteProgressListener, addIIOWriteWarningListener, canRemoveImage, canReplaceImageMetadata, canReplaceStreamMetadata, canWriteRasters, clearAbortRequest, getAvailableLocales, getLocale, getNumThumbnailsSupported, getOriginatingProvider, getOutput, getPreferredThumbnailSizes, processImageComplete, processImageProgress, processImageStarted, processThumbnailComplete, processThumbnailProgress, processThumbnailStarted, processWarningOccurred, processWarningOccurred, processWriteAborted, removeAllIIOWriteProgressListeners, removeAllIIOWriteWarningListeners, removeIIOWriteProgressListener, removeIIOWriteWarningListener, removeImage, replaceImageMetadata, replaceStreamMetadata, setLocale, write, write
-
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
- See Also:
- Constant Field Values
-
EXIF_JPEG_COMPRESSION_TYPE
static final java.lang.String EXIF_JPEG_COMPRESSION_TYPE
- See Also:
- Constant Field Values
-
DEFAULT_BYTES_PER_STRIP
public static final int DEFAULT_BYTES_PER_STRIP
- See Also:
- Constant Field Values
-
TIFFCompressionTypes
public static final java.lang.String[] TIFFCompressionTypes
Supported TIFF compression types.
-
compressionTypes
public static final java.lang.String[] compressionTypes
Known TIFF compression types.
-
isCompressionLossless
public static final boolean[] isCompressionLossless
Lossless flag for known compression types.
-
compressionNumbers
public static final int[] compressionNumbers
Compression tag values for known compression types.
-
stream
javax.imageio.stream.ImageOutputStream stream
-
headerPosition
long headerPosition
-
image
java.awt.image.RenderedImage image
-
imageType
javax.imageio.ImageTypeSpecifier imageType
-
byteOrder
java.nio.ByteOrder byteOrder
-
param
javax.imageio.ImageWriteParam param
-
compressor
TIFFCompressor compressor
-
colorConverter
TIFFColorConverter colorConverter
-
streamMetadata
TIFFStreamMetadata streamMetadata
-
imageMetadata
TIFFImageMetadata imageMetadata
-
sourceXOffset
int sourceXOffset
-
sourceYOffset
int sourceYOffset
-
sourceWidth
int sourceWidth
-
sourceHeight
int sourceHeight
-
sourceBands
int[] sourceBands
-
periodX
int periodX
-
periodY
int periodY
-
bitDepth
int bitDepth
-
numBands
int numBands
-
tileWidth
int tileWidth
-
tileLength
int tileLength
-
tilesAcross
int tilesAcross
-
tilesDown
int tilesDown
-
sampleSize
int[] sampleSize
-
scalingBitDepth
int scalingBitDepth
-
isRescaling
boolean isRescaling
-
isBilevel
boolean isBilevel
-
isImageSimple
boolean isImageSimple
-
isInverted
boolean isInverted
-
isTiled
boolean isTiled
-
nativePhotometricInterpretation
int nativePhotometricInterpretation
-
photometricInterpretation
int photometricInterpretation
-
bitsPerSample
char[] bitsPerSample
-
sampleFormat
int sampleFormat
-
scale
byte[][] scale
-
scale0
byte[] scale0
-
scaleh
byte[][] scaleh
-
scalel
byte[][] scalel
-
compression
int compression
-
predictor
int predictor
-
totalPixels
int totalPixels
-
pixelsDone
int pixelsDone
-
nextIFDPointerPos
long nextIFDPointerPos
-
nextSpace
long nextSpace
-
isWritingSequence
boolean isWritingSequence
-
isInsertingEmpty
private boolean isInsertingEmpty
-
isWritingEmpty
private boolean isWritingEmpty
-
replacePixelsLock
private java.lang.Object replacePixelsLock
-
replacePixelsIndex
private int replacePixelsIndex
-
replacePixelsMetadata
private TIFFImageMetadata replacePixelsMetadata
-
replacePixelsTileOffsets
private long[] replacePixelsTileOffsets
-
replacePixelsByteCounts
private long[] replacePixelsByteCounts
-
replacePixelsOffsetsPosition
private long replacePixelsOffsetsPosition
-
replacePixelsByteCountsPosition
private long replacePixelsByteCountsPosition
-
replacePixelsRegion
private java.awt.Rectangle replacePixelsRegion
-
inReplacePixelsNest
private boolean inReplacePixelsNest
-
reader
private TIFFImageReader reader
-
-
Method Detail
-
XToTileX
public static int XToTileX(int x, int tileGridXOffset, int tileWidth)
Converts a pixel's X coordinate into a horizontal tile index relative to a given tile grid layout specified by its X offset and tile width.If
tileWidth < 0
, the results of this method are undefined. IftileWidth == 0
, anArithmeticException
will be thrown.- Throws:
java.lang.ArithmeticException
- IftileWidth == 0
.
-
YToTileY
public static int YToTileY(int y, int tileGridYOffset, int tileHeight)
Converts a pixel's Y coordinate into a vertical tile index relative to a given tile grid layout specified by its Y offset and tile height.If
tileHeight < 0
, the results of this method are undefined. IftileHeight == 0
, anArithmeticException
will be thrown.- Throws:
java.lang.ArithmeticException
- IftileHeight == 0
.
-
getDefaultWriteParam
public javax.imageio.ImageWriteParam getDefaultWriteParam()
- Overrides:
getDefaultWriteParam
in classjavax.imageio.ImageWriter
-
setOutput
public void setOutput(java.lang.Object output)
- Overrides:
setOutput
in classjavax.imageio.ImageWriter
-
getDefaultStreamMetadata
public javax.imageio.metadata.IIOMetadata getDefaultStreamMetadata(javax.imageio.ImageWriteParam param)
- Specified by:
getDefaultStreamMetadata
in classjavax.imageio.ImageWriter
-
getDefaultImageMetadata
public javax.imageio.metadata.IIOMetadata getDefaultImageMetadata(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)
- Specified by:
getDefaultImageMetadata
in classjavax.imageio.ImageWriter
-
convertStreamMetadata
public javax.imageio.metadata.IIOMetadata convertStreamMetadata(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)
- 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)
- Specified by:
convertImageMetadata
in interfacejavax.imageio.ImageTranscoder
- Specified by:
convertImageMetadata
in classjavax.imageio.ImageWriter
-
convertStandardImageMetadata
private TIFFImageMetadata convertStandardImageMetadata(javax.imageio.metadata.IIOMetadata inData) throws javax.imageio.metadata.IIOInvalidTreeException
Converts a standardjavax_imageio_1.0
tree to aTIFFImageMetadata
object.- Parameters:
inData
- The metadata object.- Returns:
- a
TIFFImageMetadata
ornull
if the standard tree derived from the input object isnull
. - Throws:
java.lang.IllegalArgumentException
- ifinData
isnull
or does not support the standard metadata format.javax.imageio.metadata.IIOInvalidTreeException
- ifinData
generates an invalid standard metadata tree.
-
convertNativeImageMetadata
private TIFFImageMetadata convertNativeImageMetadata(javax.imageio.metadata.IIOMetadata inData) throws javax.imageio.metadata.IIOInvalidTreeException
Converts a nativecom_sun_media_imageio_plugins_tiff_image_1.0
tree to aTIFFImageMetadata
object.- Parameters:
inData
- The metadata object.- Returns:
- a
TIFFImageMetadata
ornull
if the native tree derived from the input object isnull
. - Throws:
java.lang.IllegalArgumentException
- ifinData
isnull
or does not support the native metadata format.javax.imageio.metadata.IIOInvalidTreeException
- ifinData
generates an invalid native metadata tree.
-
setupMetadata
void setupMetadata(java.awt.image.ColorModel cm, java.awt.image.SampleModel sm, int destWidth, int destHeight) throws javax.imageio.IIOException
Sets up the output metadata adding, removing, and overriding fields as needed. The destination image dimensions are provided as parameters because these might differ from those of the source due to subsampling.- Parameters:
cm
- TheColorModel
of the image being written.sm
- TheSampleModel
of the image being written.destWidth
- The width of the written image after subsampling.destHeight
- The height of the written image after subsampling.- Throws:
javax.imageio.IIOException
-
writeTile
private int writeTile(java.awt.Rectangle tileRect, TIFFCompressor compressor) throws java.io.IOException
- Parameters:
tileRect
- The area to be written which might be outside the image.- Throws:
java.io.IOException
-
equals
private boolean equals(int[] s0, int[] s1)
-
initializeScaleTables
private void initializeScaleTables(int[] sampleSize)
-
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
-
writeHeader
private void writeHeader() throws java.io.IOException
- Throws:
java.io.IOException
-
write
private void write(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p, boolean writeHeader, boolean writeData) throws java.io.IOException
- Throws:
java.io.IOException
-
canWriteSequence
public boolean canWriteSequence()
- Overrides:
canWriteSequence
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
-
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
-
endWriteSequence
public void endWriteSequence() throws java.io.IOException
- Overrides:
endWriteSequence
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
canInsertImage
public boolean canInsertImage(int imageIndex) throws java.io.IOException
- Overrides:
canInsertImage
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
locateIFD
private void locateIFD(int imageIndex, long[] ifdpos, long[] ifd) throws java.io.IOException
- Throws:
java.io.IOException
-
writeInsert
public void writeInsert(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
writeInsert
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
insert
private void insert(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param, boolean writeData) throws java.io.IOException
- Throws:
java.io.IOException
-
isEncodingEmpty
private boolean isEncodingEmpty()
-
canInsertEmpty
public boolean canInsertEmpty(int imageIndex) throws java.io.IOException
- Overrides:
canInsertEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
canWriteEmpty
public boolean canWriteEmpty() throws java.io.IOException
- Overrides:
canWriteEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
checkParamsEmpty
private void checkParamsEmpty(javax.imageio.ImageTypeSpecifier imageType, int width, int height, java.util.List thumbnails)
-
prepareInsertEmpty
public void prepareInsertEmpty(int imageIndex, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
prepareInsertEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
prepareWriteEmpty
public void prepareWriteEmpty(javax.imageio.metadata.IIOMetadata streamMetadata, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
prepareWriteEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
endInsertEmpty
public void endInsertEmpty() throws java.io.IOException
- Overrides:
endInsertEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
endWriteEmpty
public void endWriteEmpty() throws java.io.IOException
- Overrides:
endWriteEmpty
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
readIFD
private TIFFIFD readIFD(int imageIndex) throws java.io.IOException
- Throws:
java.io.IOException
-
canReplacePixels
public boolean canReplacePixels(int imageIndex) throws java.io.IOException
- Overrides:
canReplacePixels
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
prepareReplacePixels
public void prepareReplacePixels(int imageIndex, java.awt.Rectangle region) throws java.io.IOException
- Overrides:
prepareReplacePixels
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
subsample
private java.awt.image.Raster subsample(java.awt.image.Raster raster, int[] sourceBands, int subOriginX, int subOriginY, int subPeriodX, int subPeriodY, int dstOffsetX, int dstOffsetY, java.awt.Rectangle target)
-
replacePixels
public void replacePixels(java.awt.image.RenderedImage image, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
replacePixels
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
replacePixels
public void replacePixels(java.awt.image.Raster raster, javax.imageio.ImageWriteParam param) throws java.io.IOException
- Overrides:
replacePixels
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
endReplacePixels
public void endReplacePixels() throws java.io.IOException
- Overrides:
endReplacePixels
in classjavax.imageio.ImageWriter
- Throws:
java.io.IOException
-
reset
public void reset()
- Overrides:
reset
in classjavax.imageio.ImageWriter
-
dispose
public void dispose()
- Overrides:
dispose
in classjavax.imageio.ImageWriter
-
-