|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.drew.metadata.exif.ExifReader
public class ExifReader
Decodes Exif binary data, populating a Metadata
object with tag values in ExifDirectory
,
GpsDirectory
and one of the many camera makernote directories.
Field Summary | |
---|---|
private byte[] |
_data
The Exif segment as an array of bytes. |
private ExifDirectory |
_exifDirectory
The Exif directory used (loaded lazily) |
private boolean |
_isMotorollaByteOrder
Represents the native byte ordering used in the JPEG segment. |
private Metadata |
_metadata
Bean instance to store information about the image and camera/scanner/capture device. |
private static int[] |
BYTES_PER_FORMAT
The number of bytes used per format descriptor. |
private static int |
FMT_BYTE
|
private static int |
FMT_DOUBLE
|
private static int |
FMT_SBYTE
|
private static int |
FMT_SINGLE
|
private static int |
FMT_SLONG
|
private static int |
FMT_SRATIONAL
|
private static int |
FMT_SSHORT
|
private static int |
FMT_STRING
|
private static int |
FMT_ULONG
|
private static int |
FMT_UNDEFINED
|
private static int |
FMT_URATIONAL
|
private static int |
FMT_USHORT
|
private static int |
MAX_FORMAT_CODE
The number of formats known. |
static int |
TAG_EXIF_OFFSET
|
static int |
TAG_GPS_INFO_OFFSET
|
static int |
TAG_INTEROP_OFFSET
|
static int |
TAG_MAKER_NOTE
|
static int |
TIFF_HEADER_START_OFFSET
|
Constructor Summary | |
---|---|
ExifReader(byte[] data)
Creates an ExifReader for the given Exif data segment. |
|
ExifReader(File jpegFile)
Deprecated. Not all files will be Jpegs! Use a constructor that provides the exif segment in isolation. |
|
ExifReader(InputStream jpegInputStream)
Deprecated. Not all files will be Jpegs! Use a constructor that provides the exif segment in isolation. |
|
ExifReader(JpegSegmentData segmentData)
Deprecated. Not all files will be Jpegs! This overload doesn't offer much convenience to the caller. |
Method Summary | |
---|---|
private int |
calculateTagOffset(int dirStartOffset,
int entryNumber)
Determine the offset at which a given InteropArray entry begins within the specified IFD. |
private int |
calculateTagValueOffset(int byteCount,
int dirEntryOffset,
int tiffHeaderOffset)
|
Metadata |
extract()
Performs the Exif data extraction, returning a new instance of Metadata . |
Metadata |
extract(Metadata metadata)
Performs the Exif data extraction, adding found values to the specified instance of Metadata . |
private Metadata |
extractIFD(Metadata metadata,
int tiffHeaderOffset)
|
Metadata |
extractTiff(Metadata metadata)
Performs the Exif data extraction on a Tiff/Raw, adding found values to the specified instance of Metadata . |
private int |
get16Bits(int offset)
Get a 16 bit value from file's native byte order. |
private int |
get32Bits(int offset)
Get a 32 bit value from file's native byte order. |
private ExifDirectory |
getExifDirectory()
|
private boolean |
isDirectoryLengthValid(int dirStartOffset,
int tiffHeaderOffset)
|
private void |
processDirectory(Directory directory,
HashMap processedDirectoryOffsets,
int dirStartOffset,
int tiffHeaderOffset)
Process one of the nested Tiff IFD directories. |
private void |
processMakerNote(int subdirOffset,
HashMap processedDirectoryOffsets,
int tiffHeaderOffset)
|
private void |
processTag(Directory directory,
int tagType,
int tagValueOffset,
int componentCount,
int formatCode)
|
private String |
readString(int offset,
int maxLength)
Creates a String from the _data buffer starting at the specified offset, and ending where byte=='\0' or where length==maxLength. |
private boolean |
setByteOrder(String byteOrderIdentifier)
Sets the _isMotorollaByteOrder flag to true or false, depending upon the file's byte order string. |
private void |
storeThumbnailBytes(ExifDirectory exifDirectory,
int tiffHeaderOffset)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static final int[] BYTES_PER_FORMAT
private static final int MAX_FORMAT_CODE
private static final int FMT_BYTE
private static final int FMT_STRING
private static final int FMT_USHORT
private static final int FMT_ULONG
private static final int FMT_URATIONAL
private static final int FMT_SBYTE
private static final int FMT_UNDEFINED
private static final int FMT_SSHORT
private static final int FMT_SLONG
private static final int FMT_SRATIONAL
private static final int FMT_SINGLE
private static final int FMT_DOUBLE
public static final int TAG_EXIF_OFFSET
public static final int TAG_INTEROP_OFFSET
public static final int TAG_GPS_INFO_OFFSET
public static final int TAG_MAKER_NOTE
public static final int TIFF_HEADER_START_OFFSET
private final byte[] _data
private boolean _isMotorollaByteOrder
private Metadata _metadata
private ExifDirectory _exifDirectory
Constructor Detail |
---|
public ExifReader(JpegSegmentData segmentData)
segmentData
- public ExifReader(File jpegFile) throws JpegProcessingException
jpegFile
-
JpegProcessingException
public ExifReader(InputStream jpegInputStream) throws JpegProcessingException
jpegInputStream
- JPEG stream. Stream will be closed.
JpegProcessingException
public ExifReader(byte[] data)
Method Detail |
---|
public Metadata extract()
Metadata
.
extract
in interface MetadataReader
public Metadata extract(Metadata metadata)
Metadata
.
extract
in interface MetadataReader
private ExifDirectory getExifDirectory()
public Metadata extractTiff(Metadata metadata)
Metadata
.
private Metadata extractIFD(Metadata metadata, int tiffHeaderOffset)
private void storeThumbnailBytes(ExifDirectory exifDirectory, int tiffHeaderOffset)
private boolean setByteOrder(String byteOrderIdentifier)
byteOrderIdentifier
- a two-character string; either "MM" for Motorolla or "II" for Intel.
private void processDirectory(Directory directory, HashMap processedDirectoryOffsets, int dirStartOffset, int tiffHeaderOffset)
private void processMakerNote(int subdirOffset, HashMap processedDirectoryOffsets, int tiffHeaderOffset)
private boolean isDirectoryLengthValid(int dirStartOffset, int tiffHeaderOffset)
private void processTag(Directory directory, int tagType, int tagValueOffset, int componentCount, int formatCode)
private int calculateTagValueOffset(int byteCount, int dirEntryOffset, int tiffHeaderOffset)
private String readString(int offset, int maxLength)
private int calculateTagOffset(int dirStartOffset, int entryNumber)
dirStartOffset
- the offset at which the IFD startsentryNumber
- the zero-based entry numberprivate int get16Bits(int offset)
private int get32Bits(int offset)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |