org.apache.sanselan.formats.jpeg.exifRewrite
Class ExifRewriter

java.lang.Object
  extended by org.apache.sanselan.common.BinaryFileFunctions
      extended by org.apache.sanselan.common.BinaryFileParser
          extended by org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter
All Implemented Interfaces:
BinaryConstants, JpegConstants

public class ExifRewriter
extends BinaryFileParser
implements JpegConstants

Interface for Exif write/update/remove functionality for Jpeg/JFIF images.

See the source of the ExifMetadataUpdateExample class for example usage.

See Also:
org.apache.sanselan.sampleUsage.WriteExifMetadataExample

Nested Class Summary
static class ExifRewriter.ExifOverflowException
           
 
Field Summary
 
Fields inherited from class org.apache.sanselan.common.BinaryFileFunctions
debug
 
Fields inherited from interface org.apache.sanselan.formats.jpeg.JpegConstants
CONST_8BIM, EOI, EXIF_IDENTIFIER_CODE, icc_profile_label, JFIF0_SIGNATURE, JFIF0_SIGNATURE_ALTERNATIVE, JFIFMarker, JPEG_APP0, JPEG_APP0_Marker, JPEG_APP1_Marker, JPEG_APP13_Marker, JPEG_APP14_Marker, JPEG_APP15_Marker, JPEG_APP2_Marker, MARKERS, MAX_SEGMENT_SIZE, PHOTOSHOP_IDENTIFICATION_STRING, SOF0Marker, SOF10Marker, SOF11Marker, SOF12Marker, SOF13Marker, SOF14Marker, SOF15Marker, SOF1Marker, SOF2Marker, SOF3Marker, SOF4Marker, SOF5Marker, SOF6Marker, SOF7Marker, SOF8Marker, SOF9Marker, SOI, SOS_Marker, XMP_IDENTIFIER
 
Fields inherited from interface org.apache.sanselan.common.BinaryConstants
BYTE_ORDER_BIG_ENDIAN, BYTE_ORDER_INTEL, BYTE_ORDER_LEAST_SIGNIFICANT_BYTE, BYTE_ORDER_LITTLE_ENDIAN, BYTE_ORDER_LSB, BYTE_ORDER_MOST_SIGNIFICANT_BYTE, BYTE_ORDER_MOTOROLA, BYTE_ORDER_MSB, BYTE_ORDER_NETWORK
 
Constructor Summary
ExifRewriter()
          Constructor.
ExifRewriter(int byteOrder)
          Constructor.
 
Method Summary
 void removeExifMetadata(byte[] src, java.io.OutputStream os)
          Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.
 void removeExifMetadata(ByteSource byteSource, java.io.OutputStream os)
          Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.
 void removeExifMetadata(java.io.File src, java.io.OutputStream os)
          Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.
 void removeExifMetadata(java.io.InputStream src, java.io.OutputStream os)
          Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.
 void updateExifMetadataLossless(byte[] src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossless(ByteSource byteSource, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossless(java.io.File src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossless(java.io.InputStream src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossy(byte[] src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossy(ByteSource byteSource, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossy(java.io.File src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 void updateExifMetadataLossy(java.io.InputStream src, java.io.OutputStream os, TiffOutputSet outputSet)
          Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.
 
Methods inherited from class org.apache.sanselan.common.BinaryFileParser
byteArrayHasPrefix, convertByteArrayToInt, convertByteArrayToInt, convertByteArrayToShort, convertByteArrayToShort, getByteOrder, int2ToByteArray, read2Bytes, read3Bytes, read4Bytes, setByteOrder, setByteOrder
 
Methods inherited from class org.apache.sanselan.common.BinaryFileFunctions
CharsToQuad, compareByteArrays, compareByteArrays, compareBytes, compareBytes, convertByteArrayToDouble, convertByteArrayToDouble, convertByteArrayToDoubleArray, convertByteArrayToFloat, convertByteArrayToFloat, convertByteArrayToFloatArray, convertByteArrayToInt, convertByteArrayToInt, convertByteArrayToIntArray, convertByteArrayToRational, convertByteArrayToRational, convertByteArrayToRationalArray, convertByteArrayToShort, convertByteArrayToShort, convertByteArrayToShortArray, convertDoubleArrayToByteArray, convertDoubleToByteArray, convertFloatArrayToByteArray, convertFloatToByteArray, convertIntArrayToByteArray, convertIntArrayToRationalArray, convertRationalArrayToByteArray, convertRationalToByteArray, convertShortArrayToByteArray, convertShortToByteArray, copyStreamToStream, debugByteArray, debugNumber, debugNumber, debugNumber, debugNumber, debugNumberArray, findNull, findNull, getBytearrayHead, getByteArrayTail, getDebug, getRAFBytes, getStreamBytes, head, int2ToByteArray, printByteBits, printCharQuad, printCharQuad, read2Bytes, read3Bytes, read4Bytes, readAndVerifyBytes, readAndVerifyBytes, readByte, readBytearray, readByteArray, readByteArray, readBytes, readRandomBytes, scanForByte, setDebug, skipBytes, skipBytes, slice, startsWith, tail, writeIntInToByteArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifRewriter

public ExifRewriter()
Constructor. to guess whether a file contains an image based on its file extension.


ExifRewriter

public ExifRewriter(int byteOrder)
Constructor.

Parameters:
byteOrder - byte order of EXIF segment. Optional. See BinaryConstants class.
See Also:
BinaryConstants
Method Detail

removeExifMetadata

public void removeExifMetadata(java.io.File src,
                               java.io.OutputStream os)
                        throws ImageReadException,
                               java.io.IOException,
                               ImageWriteException
Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.

Parameters:
src - Image file.
os - OutputStream to write the image to.
Throws:
ImageReadException
java.io.IOException
ImageWriteException
See Also:
File, OutputStream, File, OutputStream

removeExifMetadata

public void removeExifMetadata(byte[] src,
                               java.io.OutputStream os)
                        throws ImageReadException,
                               java.io.IOException,
                               ImageWriteException
Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.

Parameters:
src - Byte array containing Jpeg image data.
os - OutputStream to write the image to.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

removeExifMetadata

public void removeExifMetadata(java.io.InputStream src,
                               java.io.OutputStream os)
                        throws ImageReadException,
                               java.io.IOException,
                               ImageWriteException
Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.

Parameters:
src - InputStream containing Jpeg image data.
os - OutputStream to write the image to.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

removeExifMetadata

public void removeExifMetadata(ByteSource byteSource,
                               java.io.OutputStream os)
                        throws ImageReadException,
                               java.io.IOException,
                               ImageWriteException
Reads a Jpeg image, removes all EXIF metadata (by removing the APP1 segment), and writes the result to a stream.

Parameters:
byteSource - ByteSource containing Jpeg image data.
os - OutputStream to write the image to.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossless

public void updateExifMetadataLossless(java.io.File src,
                                       java.io.OutputStream os,
                                       TiffOutputSet outputSet)
                                throws ImageReadException,
                                       java.io.IOException,
                                       ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossless" approach - in order to preserve data embedded in the EXIF segment that it can't parse (such as Maker Notes), this algorithm avoids overwriting any part of the original segment that it couldn't parse. This can cause the EXIF segment to grow with each update, which is a serious issue, since all EXIF data must fit in a single APP1 segment of the Jpeg image.

Parameters:
src - Image file.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossless

public void updateExifMetadataLossless(byte[] src,
                                       java.io.OutputStream os,
                                       TiffOutputSet outputSet)
                                throws ImageReadException,
                                       java.io.IOException,
                                       ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossless" approach - in order to preserve data embedded in the EXIF segment that it can't parse (such as Maker Notes), this algorithm avoids overwriting any part of the original segment that it couldn't parse. This can cause the EXIF segment to grow with each update, which is a serious issue, since all EXIF data must fit in a single APP1 segment of the Jpeg image.

Parameters:
src - Byte array containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossless

public void updateExifMetadataLossless(java.io.InputStream src,
                                       java.io.OutputStream os,
                                       TiffOutputSet outputSet)
                                throws ImageReadException,
                                       java.io.IOException,
                                       ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossless" approach - in order to preserve data embedded in the EXIF segment that it can't parse (such as Maker Notes), this algorithm avoids overwriting any part of the original segment that it couldn't parse. This can cause the EXIF segment to grow with each update, which is a serious issue, since all EXIF data must fit in a single APP1 segment of the Jpeg image.

Parameters:
src - InputStream containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossless

public void updateExifMetadataLossless(ByteSource byteSource,
                                       java.io.OutputStream os,
                                       TiffOutputSet outputSet)
                                throws ImageReadException,
                                       java.io.IOException,
                                       ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossless" approach - in order to preserve data embedded in the EXIF segment that it can't parse (such as Maker Notes), this algorithm avoids overwriting any part of the original segment that it couldn't parse. This can cause the EXIF segment to grow with each update, which is a serious issue, since all EXIF data must fit in a single APP1 segment of the Jpeg image.

Parameters:
byteSource - ByteSource containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossy

public void updateExifMetadataLossy(byte[] src,
                                    java.io.OutputStream os,
                                    TiffOutputSet outputSet)
                             throws ImageReadException,
                                    java.io.IOException,
                                    ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossy" approach - the algorithm overwrites the entire EXIF segment, ignoring the possibility that it may be discarding data it couldn't parse (such as Maker Notes).

Parameters:
src - Byte array containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossy

public void updateExifMetadataLossy(java.io.InputStream src,
                                    java.io.OutputStream os,
                                    TiffOutputSet outputSet)
                             throws ImageReadException,
                                    java.io.IOException,
                                    ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossy" approach - the algorithm overwrites the entire EXIF segment, ignoring the possibility that it may be discarding data it couldn't parse (such as Maker Notes).

Parameters:
src - InputStream containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossy

public void updateExifMetadataLossy(java.io.File src,
                                    java.io.OutputStream os,
                                    TiffOutputSet outputSet)
                             throws ImageReadException,
                                    java.io.IOException,
                                    ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossy" approach - the algorithm overwrites the entire EXIF segment, ignoring the possibility that it may be discarding data it couldn't parse (such as Maker Notes).

Parameters:
src - Image file.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException

updateExifMetadataLossy

public void updateExifMetadataLossy(ByteSource byteSource,
                                    java.io.OutputStream os,
                                    TiffOutputSet outputSet)
                             throws ImageReadException,
                                    java.io.IOException,
                                    ImageWriteException
Reads a Jpeg image, replaces the EXIF metadata and writes the result to a stream.

Note that this uses the "Lossy" approach - the algorithm overwrites the entire EXIF segment, ignoring the possibility that it may be discarding data it couldn't parse (such as Maker Notes).

Parameters:
byteSource - ByteSource containing Jpeg image data.
os - OutputStream to write the image to.
outputSet - TiffOutputSet containing the EXIF data to write.
Throws:
ImageReadException
java.io.IOException
ImageWriteException


Copyright © 2007-2009. All Rights Reserved.