You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sanselan-commits@incubator.apache.org by cm...@apache.org on 2008/02/01 05:03:18 UTC
svn commit: r617350 - in /incubator/sanselan/trunk/src:
main/java/org/apache/sanselan/common/
main/java/org/apache/sanselan/common/byteSources/
main/java/org/apache/sanselan/formats/tiff/
main/java/org/apache/sanselan/formats/tiff/constants/ main/java/...
Author: cmchen
Date: Thu Jan 31 21:03:16 2008
New Revision: 617350
URL: http://svn.apache.org/viewvc?rev=617350&view=rev
Log:
minor refinements to exif gps info and more convenience methods for writing exif info.
Modified:
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileFunctions.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/byteSources/ByteSourceArray.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/WriteExifMetadataExample.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifBaseTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifDumpTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/png/PngReadTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileFunctions.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileFunctions.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileFunctions.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileFunctions.java Thu Jan 31 21:03:16 2008
@@ -576,8 +576,8 @@
{
if (a.length != b.length)
{
-// System.out.println("length mismatch: " + a.length + " != "
-// + b.length);
+ // System.out.println("length mismatch: " + a.length + " != "
+ // + b.length);
return false;
}
@@ -598,8 +598,8 @@
{
if (a[aStart + i] != b[bStart + i])
{
-// debugNumber("\t" + "a[" + (aStart + i) + "]", a[aStart + i]);
-// debugNumber("\t" + "b[" + (bStart + i) + "]", b[bStart + i]);
+ // debugNumber("\t" + "a[" + (aStart + i) + "]", a[aStart + i]);
+ // debugNumber("\t" + "b[" + (bStart + i) + "]", b[bStart + i]);
return false;
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/byteSources/ByteSourceArray.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/byteSources/ByteSourceArray.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/byteSources/ByteSourceArray.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/byteSources/ByteSourceArray.java Thu Jan 31 21:03:16 2008
@@ -53,7 +53,7 @@
return result;
}
- public long getLength()
+ public long getLength()
{
return bytes.length;
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java Thu Jan 31 21:03:16 2008
@@ -35,7 +35,7 @@
return TiffDirectory.description(type);
}
- public String getElementDescription(boolean verbose)
+ public String getElementDescription(boolean verbose)
{
if (!verbose)
return "TIFF Directory (" + description() + ")";
@@ -188,8 +188,6 @@
return null;
}
-
-
public final class ImageDataElement extends TiffElement
{
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java Thu Jan 31 21:03:16 2008
@@ -65,8 +65,7 @@
}
private int sortHint = -1;
-
-
+
public boolean isLocalValue()
{
return fieldType.isLocalValue(this);
@@ -281,8 +280,8 @@
if (null == possibleMatches)
{
-// if (tag == 0x8769)
-// Debug.debug("exif offset field is unknown.1");
+ // if (tag == 0x8769)
+ // Debug.debug("exif offset field is unknown.1");
return TIFF_TAG_UNKNOWN;
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java Thu Jan 31 21:03:16 2008
@@ -32,6 +32,7 @@
import org.apache.sanselan.formats.tiff.write.TiffOutputDirectory;
import org.apache.sanselan.formats.tiff.write.TiffOutputField;
import org.apache.sanselan.formats.tiff.write.TiffOutputSet;
+import org.apache.sanselan.util.Debug;
public class TiffImageMetadata extends ImageMetadata
implements
@@ -360,6 +361,37 @@
return result.toString();
}
+
+ public double getLongitudeAsDegreesEast() throws ImageReadException
+ {
+ double result = longitudeDegrees.doubleValue()
+ + (longitudeMinutes.doubleValue() / 60.0)
+ + (longitudeSeconds.doubleValue() / 360.0);
+
+ if (longitudeRef.trim().equalsIgnoreCase("e"))
+ return result;
+ else if (longitudeRef.trim().equalsIgnoreCase("w"))
+ return -result;
+ else
+ throw new ImageReadException("Unknown longitude ref: \""
+ + longitudeRef + "\"");
+ }
+
+ public double getLatitudeAsDegreesNorth() throws ImageReadException
+ {
+ double result = latitudeDegrees.doubleValue()
+ + (latitudeMinutes.doubleValue() / 60.0)
+ + (latitudeSeconds.doubleValue() / 360.0);
+
+ if (latitudeRef.trim().equalsIgnoreCase("n"))
+ return result;
+ else if (latitudeRef.trim().equalsIgnoreCase("s"))
+ return -result;
+ else
+ throw new ImageReadException("Unknown latitude ref: \""
+ + latitudeRef + "\"");
+ }
+
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java Thu Jan 31 21:03:16 2008
@@ -129,6 +129,7 @@
{
super(name, tag, dataTypes, length, exifDirectory);
}
+
public Offset(String name, int tag, FieldType dataType, int length,
ExifDirectoryType exifDirectory)
{
@@ -412,14 +413,14 @@
public byte[] encodeValue(FieldType fieldType, Object value,
int byteOrder) throws ImageWriteException
{
-// Debug.debug();
-// Debug.debug("unknown tag(0x" + Integer.toHexString(tag) + ") ",
-// this);
-// Debug.debug("unknown tag fieldType", fieldType);
-// Debug.debug("unknown tag value", value);
-// Debug.debug("unknown tag value", Debug.getType(value));
+ // Debug.debug();
+ // Debug.debug("unknown tag(0x" + Integer.toHexString(tag) + ") ",
+ // this);
+ // Debug.debug("unknown tag fieldType", fieldType);
+ // Debug.debug("unknown tag value", value);
+ // Debug.debug("unknown tag value", Debug.getType(value));
byte result[] = super.encodeValue(fieldType, value, byteOrder);
-// Debug.debug("unknown tag result", result);
+ // Debug.debug("unknown tag result", result);
return result;
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java Thu Jan 31 21:03:16 2008
@@ -59,9 +59,8 @@
separateValueItem = new TiffOutputItem.Value(name, bytes);
}
}
-
+
private int sortHint = -1;
-
public static TiffOutputField create(TagInfo tagInfo, int byteOrder,
Number number) throws ImageWriteException
@@ -78,6 +77,38 @@
return new TiffOutputField(tagInfo.tag, tagInfo, fieldType, 1, bytes);
}
+
+ public static TiffOutputField create(TagInfo tagInfo, int byteOrder,
+ Number value[]) throws ImageWriteException
+ {
+ if (tagInfo.dataTypes == null || tagInfo.dataTypes.length < 1)
+ throw new ImageWriteException("Tag has no default data type.");
+ FieldType fieldType = tagInfo.dataTypes[0];
+
+ if (tagInfo.length != value.length)
+ throw new ImageWriteException("Tag does not expect a single value.");
+
+ byte bytes[] = fieldType.writeData(value, byteOrder);
+
+ return new TiffOutputField(tagInfo.tag, tagInfo, fieldType, value.length, bytes);
+ }
+
+ public static TiffOutputField create(TagInfo tagInfo, int byteOrder,
+ String value) throws ImageWriteException
+ {
+ FieldType fieldType;
+ if (tagInfo.dataTypes == null)
+ fieldType = FIELD_TYPE_ASCII;
+ else if (tagInfo.dataTypes == FIELD_TYPE_DESCRIPTION_ASCII)
+ fieldType = FIELD_TYPE_ASCII;
+ else
+ throw new ImageWriteException("Tag has unexpected data type.");
+
+ byte bytes[] = fieldType.writeData(value, byteOrder);
+
+ return new TiffOutputField(tagInfo.tag, tagInfo, fieldType, 1, bytes);
+ }
+
protected static final TiffOutputField createOffsetField(TagInfo tagInfo,
int byteOrder) throws ImageWriteException
{
@@ -90,19 +121,19 @@
protected void writeField(BinaryOutputStream bos) throws IOException,
ImageWriteException
{
-// CachingOutputStream cos = null;
-// if (tagInfo.isUnknown())
-// {
-// cos = new CachingOutputStream(bos);
-// int byteOrder = bos.getByteOrder();
-// bos = new BinaryOutputStream(cos, byteOrder);
-//
-// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
-// + ") isLocalValue()", isLocalValue());
-// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
-// + ") bytes", bytes);
-// }
-
+ // CachingOutputStream cos = null;
+ // if (tagInfo.isUnknown())
+ // {
+ // cos = new CachingOutputStream(bos);
+ // int byteOrder = bos.getByteOrder();
+ // bos = new BinaryOutputStream(cos, byteOrder);
+ //
+ // Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+ // + ") isLocalValue()", isLocalValue());
+ // Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+ // + ") bytes", bytes);
+ // }
+
bos.write2Bytes(tag);
bos.write2Bytes(fieldType.type);
bos.write4Bytes(count);
@@ -128,11 +159,11 @@
if ((written % 2) != 0)
written++;
}
-// if (null != cos)
-// {
-// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
-// + ") written field", cos.getCache());
-// }
+ // if (null != cos)
+ // {
+ // Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+ // + ") written field", cos.getCache());
+ // }
}
protected TiffOutputItem getSeperateValue()
@@ -147,10 +178,10 @@
protected void setData(byte bytes[]) throws ImageWriteException
{
-// if(tagInfo.isUnknown())
-// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
-// + ") setData", bytes);
-
+ // if(tagInfo.isUnknown())
+ // Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+ // + ") setData", bytes);
+
if (this.bytes.length != bytes.length)
throw new ImageWriteException("Cannot change size of value.");
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java Thu Jan 31 21:03:16 2008
@@ -20,6 +20,8 @@
import java.util.List;
import org.apache.sanselan.ImageWriteException;
+import org.apache.sanselan.common.RationalNumber;
+import org.apache.sanselan.formats.tiff.TiffField;
import org.apache.sanselan.formats.tiff.constants.TagInfo;
import org.apache.sanselan.formats.tiff.constants.TiffConstants;
import org.apache.sanselan.util.Debug;
@@ -84,6 +86,15 @@
return addExifDirectory();
}
+ public TiffOutputDirectory getOrCreateGPSDirectory()
+ throws ImageWriteException
+ {
+ TiffOutputDirectory result = findDirectory(DIRECTORY_TYPE_GPS);
+ if (null != result)
+ return result;
+ return addGPSDirectory();
+ }
+
public TiffOutputDirectory getGPSDirectory()
{
return findDirectory(DIRECTORY_TYPE_GPS);
@@ -104,6 +115,79 @@
return directory;
}
return null;
+ }
+
+ /*
+ * Expects longitude in degrees E, latitude in degrees N
+ */
+ public void setGPSInDegrees(double longitude, double latitude)
+ throws ImageWriteException
+ {
+ TiffOutputDirectory gpsDirectory = getOrCreateGPSDirectory();
+
+ String longitudeRef = longitude < 0 ? "W" : "E";
+ longitude = Math.abs(longitude);
+ String latitudeRef = latitude < 0 ? "S" : "N";
+ latitude = Math.abs(latitude);
+
+ {
+ TiffOutputField longitudeRefField = TiffOutputField.create(
+ TiffConstants.GPS_TAG_GPS_LONGITUDE_REF, byteOrder,
+ longitudeRef);
+ gpsDirectory.removeField(TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
+ gpsDirectory.add(longitudeRefField);
+ }
+
+ {
+ TiffOutputField latitudeRefField = TiffOutputField.create(
+ TiffConstants.GPS_TAG_GPS_LATITUDE_REF, byteOrder,
+ latitudeRef);
+ gpsDirectory.removeField(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
+ gpsDirectory.add(latitudeRefField);
+ }
+
+ {
+ double value = longitude;
+ double longitudeDegrees = (long) value;
+ value %= 1;
+ value *= 60.0;
+ double longitudeMinutes = (long) value;
+ value %= 1;
+ value *= 60.0;
+ double longitudeSeconds = value;
+ Double values[] = {
+ new Double(longitudeDegrees), new Double(longitudeMinutes),
+ new Double(longitudeSeconds),
+ };
+
+ TiffOutputField longitudeField = TiffOutputField.create(
+ TiffConstants.GPS_TAG_GPS_LONGITUDE, byteOrder, values);
+ gpsDirectory.removeField(TiffConstants.GPS_TAG_GPS_LONGITUDE);
+ gpsDirectory.add(longitudeField);
+ }
+
+ {
+ double value = latitude;
+ double latitudeDegrees = (long) value;
+ value %= 1;
+ value *= 60.0;
+ double latitudeMinutes = (long) value;
+ value %= 1;
+ value *= 60.0;
+ double latitudeSeconds = value;
+ Double values[] = {
+ new Double(latitudeDegrees), new Double(latitudeMinutes),
+ new Double(latitudeSeconds),
+ };
+
+
+
+ TiffOutputField latitudeField = TiffOutputField.create(
+ TiffConstants.GPS_TAG_GPS_LATITUDE, byteOrder, values);
+ gpsDirectory.removeField(TiffConstants.GPS_TAG_GPS_LATITUDE);
+ gpsDirectory.add(latitudeField);
+ }
+
}
public void removeField(TagInfo tagInfo)
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java Thu Jan 31 21:03:16 2008
@@ -26,8 +26,10 @@
import org.apache.sanselan.common.RationalNumber;
import org.apache.sanselan.formats.jpeg.JpegImageMetadata;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.formats.tiff.TiffImageMetadata;
import org.apache.sanselan.formats.tiff.constants.TagInfo;
import org.apache.sanselan.formats.tiff.constants.TiffConstants;
+import org.apache.sanselan.util.Debug;
public class MetadataExample
{
@@ -71,7 +73,24 @@
System.out.println();
- // more specific example of how to access GPS values.
+ // simple interface to GPS data
+ TiffImageMetadata exifMetadata = jpegMetadata.getExif();
+ if (null != exifMetadata)
+ {
+ TiffImageMetadata.GPSInfo gpsInfo = exifMetadata.getGPS();
+ if (null != gpsInfo)
+ {
+ String gpsDescription = gpsInfo.toString();
+ double longitude = gpsInfo.getLongitudeAsDegreesEast();
+ double latitude = gpsInfo.getLatitudeAsDegreesNorth();
+
+ System.out.println(" " + "GPS Description: " + gpsInfo);
+ System.out.println(" " + "GPS Longitude (Degrees East): " + longitude);
+ System.out.println(" " + "GPS Latitude (Degrees North): " + latitude);
+ }
+ }
+
+ // more specific example of how to manually access GPS values
TiffField gpsLatitudeRefField = jpegMetadata
.findEXIFValue(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
TiffField gpsLatitudeField = jpegMetadata
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/WriteExifMetadataExample.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/WriteExifMetadataExample.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/WriteExifMetadataExample.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/WriteExifMetadataExample.java Thu Jan 31 21:03:16 2008
@@ -125,6 +125,16 @@
.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);
@@ -148,116 +158,5 @@
}
}
- public static void metadataExample(File file) throws ImageReadException,
- IOException
- {
- // get all metadata stored in EXIF format (ie. from JPEG or TIFF).
- // org.w3c.dom.Node node = Sanselan.getMetadataObsolete(imageBytes);
- IImageMetadata metadata = Sanselan.getMetadata(file);
-
- //System.out.println(metadata);
-
- if (metadata instanceof JpegImageMetadata)
- {
- JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
-
- // Jpeg EXIF metadata is stored in a TIFF-based directory structure
- // and is identified with TIFF tags.
- // Here we look for the "x resolution" tag, but
- // we could just as easily search for any other tag.
- //
- // see the TiffConstants file for a list of TIFF tags.
-
- System.out.println("file: " + file.getPath());
-
- // print out various interesting EXIF tags.
- printTagValue(jpegMetadata, TiffConstants.TIFF_TAG_XRESOLUTION);
- printTagValue(jpegMetadata, TiffConstants.TIFF_TAG_DATE_TIME);
- printTagValue(jpegMetadata,
- TiffConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
- printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_CREATE_DATE);
- printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_ISO);
- printTagValue(jpegMetadata,
- TiffConstants.EXIF_TAG_SHUTTER_SPEED_VALUE);
- printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_APERTURE_VALUE);
- printTagValue(jpegMetadata, TiffConstants.EXIF_TAG_BRIGHTNESS_VALUE);
- printTagValue(jpegMetadata, TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
- printTagValue(jpegMetadata, TiffConstants.GPS_TAG_GPS_LATITUDE);
- printTagValue(jpegMetadata, TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
- printTagValue(jpegMetadata, TiffConstants.GPS_TAG_GPS_LONGITUDE);
-
- System.out.println();
-
- // more specific example of how to access GPS values.
- TiffField gpsLatitudeRefField = jpegMetadata
- .findEXIFValue(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
- TiffField gpsLatitudeField = jpegMetadata
- .findEXIFValue(TiffConstants.GPS_TAG_GPS_LATITUDE);
- TiffField gpsLongitudeRefField = jpegMetadata
- .findEXIFValue(TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
- TiffField gpsLongitudeField = jpegMetadata
- .findEXIFValue(TiffConstants.GPS_TAG_GPS_LONGITUDE);
- if (gpsLatitudeRefField != null && gpsLatitudeField != null
- && gpsLongitudeRefField != null
- && gpsLongitudeField != null)
- {
- // all of these values are strings.
- String gpsLatitudeRef = (String) gpsLatitudeRefField.getValue();
- RationalNumber gpsLatitude[] = (RationalNumber[]) (gpsLatitudeField
- .getValue());
- String gpsLongitudeRef = (String) gpsLongitudeRefField
- .getValue();
- RationalNumber gpsLongitude[] = (RationalNumber[]) gpsLongitudeField
- .getValue();
-
- RationalNumber gpsLatitudeDegrees = gpsLatitude[0];
- RationalNumber gpsLatitudeMinutes = gpsLatitude[1];
- RationalNumber gpsLatitudeSeconds = gpsLatitude[2];
-
- RationalNumber gpsLongitudeDegrees = gpsLongitude[0];
- RationalNumber gpsLongitudeMinutes = gpsLongitude[1];
- RationalNumber gpsLongitudeSeconds = gpsLongitude[2];
-
- // This will format the gps info like so:
- //
- // gpsLatitude: 8 degrees, 40 minutes, 42.2 seconds S
- // gpsLongitude: 115 degrees, 26 minutes, 21.8 seconds E
-
- System.out.println(" " + "GPS Latitude: "
- + gpsLatitudeDegrees.toDisplayString() + " degrees, "
- + gpsLatitudeMinutes.toDisplayString() + " minutes, "
- + gpsLatitudeSeconds.toDisplayString() + " seconds "
- + gpsLatitudeRef);
- System.out.println(" " + "GPS Longitude: "
- + gpsLongitudeDegrees.toDisplayString() + " degrees, "
- + gpsLongitudeMinutes.toDisplayString() + " minutes, "
- + gpsLongitudeSeconds.toDisplayString() + " seconds "
- + gpsLongitudeRef);
-
- }
-
- System.out.println();
-
- ArrayList items = jpegMetadata.getItems();
- for (int i = 0; i < items.size(); i++)
- {
- Object item = items.get(i);
- System.out.println(" " + "item: " + item);
- }
-
- System.out.println();
- }
- }
-
- private static void printTagValue(JpegImageMetadata jpegMetadata,
- TagInfo tagInfo) throws ImageReadException, IOException
- {
- TiffField field = jpegMetadata.findEXIFValue(tagInfo);
- if (field == null)
- System.out.println(tagInfo.name + ": " + "Not Found.");
- else
- System.out.println(tagInfo.name + ": "
- + field.getValueDescription());
- }
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java Thu Jan 31 21:03:16 2008
@@ -889,7 +889,6 @@
}
}
-
public static final void purgeMemory()
{
try
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java Thu Jan 31 21:03:16 2008
@@ -76,10 +76,10 @@
File dataFolder = new File(testFolder, "data");
File imagesFolder = new File(dataFolder, "images");
-// imagesFolder = new File(
+ // imagesFolder = new File(
// "src\\test\\data\\images\\exif\\drewNoakes\\");
// "src\\test\\data\\images\\exif\\drewNoakes\\007_Canon EOS 20D (1).jpg");
-//"src\\test\\data\\images\\tiff\\");
+ //"src\\test\\data\\images\\tiff\\");
assertTrue(imagesFolder.exists());
@@ -138,17 +138,20 @@
if (filter != null)
{
List filtered = new ArrayList();
+// long last = System.currentTimeMillis();
for (int i = 0; i < images.size(); i++)
{
- Debug.purgeMemory();
-
+ if(i%10==0)
+ Debug.purgeMemory();
+
File file = (File) images.get(i);
+// Debug.debug("considering file", file.getAbsoluteFile());
if (file.getParentFile().getName().toLowerCase().equals(
"@broken"))
continue;
- if (filter.accept(file))
+ if (filter.accept(file) )
{
filtered.add(file);
if (max > 0 && filtered.size() >= max)
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java Thu Jan 31 21:03:16 2008
@@ -60,8 +60,9 @@
List imageFiles = getTestImages();
for (int i = 0; i < imageFiles.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
-
+
File imageFile = (File) imageFiles.get(i);
Debug.debug("imageFile", imageFile);
assertTrue(imageFile != null);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java Thu Jan 31 21:03:16 2008
@@ -39,6 +39,7 @@
List images = getJpegImages();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifBaseTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifBaseTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifBaseTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifBaseTest.java Thu Jan 31 21:03:16 2008
@@ -43,9 +43,9 @@
if (!file.getName().toLowerCase().endsWith(".jpg"))
return false;
- ImageFormat format = Sanselan.guessFormat(file);
- if (format != ImageFormat.IMAGE_FORMAT_JPEG)
- return false;
+// ImageFormat format = Sanselan.guessFormat(file);
+// if (format != ImageFormat.IMAGE_FORMAT_JPEG)
+// return false;
// Debug.debug("possible file", file);
@@ -76,12 +76,16 @@
return getTestImage(imageFilter);
}
- // , int max
- //
protected List getImagesWithExifData() throws IOException,
ImageReadException
{
return getTestImages(imageFilter);
+ }
+
+ protected List getImagesWithExifData(int max) throws IOException,
+ ImageReadException
+ {
+ return getTestImages(imageFilter, max);
}
}
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifDumpTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifDumpTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifDumpTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifDumpTest.java Thu Jan 31 21:03:16 2008
@@ -34,10 +34,10 @@
public class ExifDumpTest extends ExifBaseTest
{
-// public ExifDumpTest(String name)
-// {
-// super(name);
-// }
+ // public ExifDumpTest(String name)
+ // {
+ // super(name);
+ // }
public void test() throws IOException, ImageReadException,
ImageWriteException
@@ -45,6 +45,7 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
@@ -57,13 +58,15 @@
Map params = new HashMap();
boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
- params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(!ignoreImageData));
+ params
+ .put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
+ !ignoreImageData));
JpegImageMetadata metadata = (JpegImageMetadata) Sanselan
.getMetadata(imageFile, params);
- if(null==metadata)
+ if (null == metadata)
continue;
-// assertNotNull(metadata.getExif());
+ // assertNotNull(metadata.getExif());
metadata.dump();
}
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/ExifRewriteTest.java Thu Jan 31 21:03:16 2008
@@ -57,6 +57,7 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
@@ -99,6 +100,7 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
@@ -182,6 +184,7 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/GpsTest.java Thu Jan 31 21:03:16 2008
@@ -32,15 +32,19 @@
{
public void test() throws Exception
-
{
- List images = getImagesWithExifData();
+ List images = getImagesWithExifData(300);
for (int i = 0; i < images.size(); i++)
{
- Debug.purgeMemory();
+ if (i % 10 == 0)
+ Debug.purgeMemory();
File imageFile = (File) images.get(i);
+
+// Debug.debug();
+// Debug.debug("imageFile", imageFile);
+
if (imageFile.getParentFile().getName().toLowerCase().equals(
"@broken"))
continue;
@@ -67,6 +71,11 @@
Debug.debug("imageFile", imageFile);
Debug.debug("gpsInfo", gpsInfo);
+ Debug.debug("gpsInfo longitude as degrees east", gpsInfo
+ .getLongitudeAsDegreesEast());
+ Debug.debug("gpsInfo latitude as degrees north", gpsInfo
+ .getLatitudeAsDegreesNorth());
+
Debug.debug();
}
catch (Exception e)
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/SpecificExifTagTest.java Thu Jan 31 21:03:16 2008
@@ -37,10 +37,10 @@
implements
AllTagConstants
{
-// public SpecificExifTagTest(String name)
-// {
-// super(name);
-// }
+ // public SpecificExifTagTest(String name)
+ // {
+ // super(name);
+ // }
public void testSingleImage() throws IOException, ImageReadException,
ImageWriteException
@@ -55,10 +55,12 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
- if (imageFile.getParentFile().getName().toLowerCase().equals("@broken"))
+ if (imageFile.getParentFile().getName().toLowerCase().equals(
+ "@broken"))
continue;
checkImage(imageFile);
}
@@ -70,7 +72,7 @@
private void checkImage(File imageFile) throws IOException,
ImageReadException, ImageWriteException
{
-// Debug.debug("imageFile", imageFile.getAbsoluteFile());
+ // Debug.debug("imageFile", imageFile.getAbsoluteFile());
Map params = new HashMap();
boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java Thu Jan 31 21:03:16 2008
@@ -32,10 +32,10 @@
implements
AllTagConstants
{
-// public WriteExifMetadataExampleTest(String name)
-// {
-// super(name);
-// }
+ // public WriteExifMetadataExampleTest(String name)
+ // {
+ // super(name);
+ // }
public void test() throws IOException, ImageReadException,
ImageWriteException
@@ -43,8 +43,9 @@
List images = getImagesWithExifData();
for (int i = 0; i < images.size(); i++)
{
- Debug.purgeMemory();
-
+ if (i % 10 == 0)
+ Debug.purgeMemory();
+
File imageFile = (File) images.get(i);
Debug.debug("imageFile", imageFile.getAbsoluteFile());
@@ -55,7 +56,7 @@
try
{
boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
- if(ignoreImageData)
+ if (ignoreImageData)
continue;
new WriteExifMetadataExample().changeExifMetadata(imageFile,
tempFile);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/png/PngReadTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/png/PngReadTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/png/PngReadTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/png/PngReadTest.java Thu Jan 31 21:03:16 2008
@@ -33,10 +33,10 @@
public class PngReadTest extends SanselanTest
{
-// public PngReadTest(String name)
-// {
-// super(name);
-// }
+ // public PngReadTest(String name)
+ // {
+ // super(name);
+ // }
private static boolean isPng(File file) throws IOException,
ImageReadException
@@ -53,10 +53,10 @@
}
};
-// private File getPngImage() throws IOException, ImageReadException
-// {
-// return getTestImage(imageFilter);
-// }
+ // private File getPngImage() throws IOException, ImageReadException
+ // {
+ // return getTestImage(imageFilter);
+ // }
private List getPngImages() throws IOException, ImageReadException
{
@@ -71,6 +71,7 @@
List images = getPngImages();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);
@@ -88,21 +89,21 @@
catch (Exception e)
{
}
-
+
try
{
ImageInfo imageInfo = Sanselan.getImageInfo(imageFile);
-// assertNotNull(imageInfo);
+ // assertNotNull(imageInfo);
fail("Image read should have failed.");
}
catch (Exception e)
{
}
-
+
try
{
BufferedImage image = Sanselan.getBufferedImage(imageFile);
-// assertNotNull(image);
+ // assertNotNull(image);
fail("Image read should have failed.");
}
catch (Exception e)
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java?rev=617350&r1=617349&r2=617350&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java Thu Jan 31 21:03:16 2008
@@ -33,10 +33,10 @@
public class TiffReadTest extends SanselanTest
{
-// public TiffReadTest(String name)
-// {
-// super(name);
-// }
+ // public TiffReadTest(String name)
+ // {
+ // super(name);
+ // }
private static boolean isTiff(File file) throws IOException,
ImageReadException
@@ -53,10 +53,10 @@
}
};
-// private File getTiffImage() throws IOException, ImageReadException
-// {
-// return getTestImage(imageFilter);
-// }
+ // private File getTiffImage() throws IOException, ImageReadException
+ // {
+ // return getTestImage(imageFilter);
+ // }
private List getTiffImages() throws IOException, ImageReadException
{
@@ -69,6 +69,7 @@
List images = getTiffImages();
for (int i = 0; i < images.size(); i++)
{
+ if(i%10==0)
Debug.purgeMemory();
File imageFile = (File) images.get(i);