Class ExifRewriter
- java.lang.Object
-
- org.apache.commons.imaging.common.BinaryFileParser
-
- org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter
-
public class ExifRewriter extends BinaryFileParser
Interface for Exif write/update/remove functionality for Jpeg/JFIF images.See the source of the ExifMetadataUpdateExample class for example usage.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ExifRewriter.ExifOverflowException
private static class
ExifRewriter.JFIFPiece
private static class
ExifRewriter.JFIFPieceImageData
private static class
ExifRewriter.JFIFPieces
private static class
ExifRewriter.JFIFPieceSegment
private static class
ExifRewriter.JFIFPieceSegmentExif
-
Constructor Summary
Constructors Constructor Description ExifRewriter()
Constructor.ExifRewriter(java.nio.ByteOrder byteOrder)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private ExifRewriter.JFIFPieces
analyzeJFIF(ByteSource byteSource)
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(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
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
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(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
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
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(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.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.private byte[]
writeExifSegment(TiffImageWriterBase writer, TiffOutputSet outputSet, boolean includeEXIFPrefix)
private void
writeSegmentsReplacingExif(java.io.OutputStream outputStream, java.util.List<ExifRewriter.JFIFPiece> segments, byte[] newBytes)
-
Methods inherited from class org.apache.commons.imaging.common.BinaryFileParser
debugNumber, debugNumber, getByteOrder, setByteOrder
-
-
-
-
Method Detail
-
analyzeJFIF
private ExifRewriter.JFIFPieces analyzeJFIF(ByteSource byteSource) throws ImageReadException, java.io.IOException
- Throws:
ImageReadException
java.io.IOException
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data- 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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
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
- if it fails to read the JFIF segmentsjava.io.IOException
- if it fails to read the image dataImageWriteException
- if it fails to write the updated data
-
writeSegmentsReplacingExif
private void writeSegmentsReplacingExif(java.io.OutputStream outputStream, java.util.List<ExifRewriter.JFIFPiece> segments, byte[] newBytes) throws ImageWriteException, java.io.IOException
- Throws:
ImageWriteException
java.io.IOException
-
writeExifSegment
private byte[] writeExifSegment(TiffImageWriterBase writer, TiffOutputSet outputSet, boolean includeEXIFPrefix) throws java.io.IOException, ImageWriteException
- Throws:
java.io.IOException
ImageWriteException
-
-