package com.drew.metadata.test;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifReader;
import com.drew.metadata.iptc.IptcReader;
import com.drew.metadata.jpeg.JpegCommentReader;
import com.sun.media.
import com.sun.image.codec.jpeg.JPEGDecodeParam;
import com.sun.*;
public class JpegMetadataReaderSunUtils
{
public static Metadata readMetadata(JPEGDecodeParam decodeParam)
{
final Metadata metadata = new Metadata();
/*
* We should only really be seeing Exif in _data[0]... the 2D array exists because markers can
* theoretically appear multiple times in the file.
*/
// TODO test this method
byte[][] exifSegment = decodeParam
.getMarkerData(JPEGDecodeParam.APP1_MARKER);
if (exifSegment != null && exifSegment[0].length > 0)
{
new ExifReader(exifSegment[0]).extract(metadata);
}
// similarly, use only the first IPTC segment
byte[][] iptcSegment = decodeParam
.getMarkerData(JPEGDecodeParam.APPD_MARKER);
if (iptcSegment != null && iptcSegment[0].length > 0)
{
new IptcReader(iptcSegment[0]).extract(metadata);
}
// NOTE: Unable to utilise JpegReader for the SOF0 frame here, as the
// decodeParam doesn't contain the byte[]
// similarly, use only the first Jpeg Comment segment
byte[][] jpegCommentSegment = decodeParam
.getMarkerData(JPEGDecodeParam.COMMENT_MARKER);
if (jpegCommentSegment != null && jpegCommentSegment[0].length > 0)
{
new JpegCommentReader(jpegCommentSegment[0]).extract(metadata);
}
return metadata;
}
}