throws IOException, ImageReadException, ImageWriteException
{
OutputStream os = null;
try
{
TiffOutputSet outputSet = null;
// note that metadata might be null if no metadata is found.
IImageMetadata metadata = Sanselan.getMetadata(jpegImageFile);
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata)
{
// note that exif might be null if no Exif metadata is found.
TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif)
{
// TiffImageMetadata class is immutable (read-only).
// TiffOutputSet class represents the Exif data to write.
//
// Usually, we want to update existing Exif metadata by changing
// the values of a few fields, or adding a field.
// In these cases, it is easiest to use getOutputSet() to
// start with a "copy" of the fields read from the image.
outputSet = exif.getOutputSet();
}
}
if(null==outputSet)
outputSet = new TiffOutputSet();
{
// Example of how to remove a single tag/field.
//
// Note that this approach is crude: Exif data is organized in
// directories. The same tag/field may appear in more than one
// directory.
TiffOutputField aperture = outputSet
.findField(TiffConstants.EXIF_TAG_APERTURE_VALUE);
if (null != aperture)
{
// set contains aperture tag/field.
outputSet
.removeField(TiffConstants.EXIF_TAG_APERTURE_VALUE);
}
}
{
// Example of how to add a field/tag to the output set.
//
// Note that you should first remove the field/tag if it already exists
// in this directory. See above.
//
// Certain fields/tags are expected in certain Exif directories;
// Others can occur in more than one directory (and often have a different
// meaning in different directories).
//
// TagInfo constants often contain a description of what directories
// are associated with a given tag.
//
// see org.apache.sanselan.formats.tiff.constants.AllTagConstants
//
TiffOutputField aperture = TiffOutputField.create(
TiffConstants.EXIF_TAG_APERTURE_VALUE,
outputSet.byteOrder, new Double(0.3));
TiffOutputDirectory exifDirectory = outputSet
.getOrCreateExifDirectory();
exifDirectory.add(aperture);
}
{
// Example of how to add/update GPS info to output set.
// New York City
double longitude = -74.0; // 74 degrees W (in Degrees East)
double latitude = 40 + 43 / 60.0; // 40 degrees N (in Degrees North)
outputSet.setGPSInDegrees(longitude, latitude);
}
// printTagValue(jpegMetadata, TiffConstants.TIFF_TAG_DATE_TIME);
os = new FileOutputStream(dst);