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/02 18:29:28 UTC
svn commit: r617857 - in /incubator/sanselan/trunk/src:
main/java/org/apache/sanselan/formats/tiff/constants/
main/java/org/apache/sanselan/formats/tiff/write/
main/java/org/apache/sanselan/sampleUsage/ test/java/org/apache/sanselan/
test/java/org/apac...
Author: cmchen
Date: Sat Feb 2 10:29:27 2008
New Revision: 617857
URL: http://svn.apache.org/viewvc?rev=617857&view=rev
Log:
slight elaboration of exif writing sample code.
also slightly refactored the unit tests to make quick tests more efficient.
Modified:
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.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/WriteExifMetadataExample.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java
incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/exif/WriteExifMetadataExampleTest.java
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java?rev=617857&r1=617856&r2=617857&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java Sat Feb 2 10:29:27 2008
@@ -17,14 +17,17 @@
package org.apache.sanselan.formats.tiff.constants;
import org.apache.sanselan.SanselanConstants;
+import org.apache.sanselan.common.BinaryConstants;
public interface TiffConstants
extends
SanselanConstants,
TiffFieldTypeConstants,
TiffDirectoryConstants,
- AllTagConstants
+ AllTagConstants,
+ BinaryConstants
{
+ public static final int DEFAULT_TIFF_BYTE_ORDER = BYTE_ORDER_INTEL;
public static final int TIFF_HEADER_SIZE = 8;
public static final int TIFF_DIRECTORY_HEADER_LENGTH = 4;
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java?rev=617857&r1=617856&r2=617857&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java Sat Feb 2 10:29:27 2008
@@ -41,13 +41,12 @@
BinaryConstants
{
- public static final int DEFAULT_WRITE_BYTE_ORDER = BYTE_ORDER_INTEL;
protected final int byteOrder;
public TiffImageWriterBase()
{
- this.byteOrder = DEFAULT_WRITE_BYTE_ORDER;
+ this.byteOrder = DEFAULT_TIFF_BYTE_ORDER;
}
public TiffImageWriterBase(int byteOrder)
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=617857&r1=617856&r2=617857&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 Sat Feb 2 10:29:27 2008
@@ -31,6 +31,14 @@
public final int byteOrder;
private final ArrayList directories = new ArrayList();
+
+
+ public TiffOutputSet()
+ {
+ this(TiffConstants.DEFAULT_TIFF_BYTE_ORDER);
+ }
+
+
public TiffOutputSet(final int byteOrder)
{
super();
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=617857&r1=617856&r2=617857&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 Sat Feb 2 10:29:27 2008
@@ -71,21 +71,31 @@
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();
- // note that exif might be null if no Exif metadata is found.
- TiffImageMetadata exif = jpegMetadata.getExif();
-
- // 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.
- TiffOutputSet outputSet = exif.getOutputSet();
+ 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.
@@ -125,13 +135,13 @@
.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)
+ double latitude = 40 + 43 / 60.0; // 40 degrees N (in Degrees North)
outputSet.setGPSInDegrees(longitude, latitude);
}
@@ -157,6 +167,5 @@
}
}
}
-
}
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=617857&r1=617856&r2=617857&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 Sat Feb 2 10:29:27 2008
@@ -69,35 +69,31 @@
PHIL_HARVEY_TEST_IMAGE_FOLDER.getAbsolutePath());
}
- protected List getAllTestImages()
- {
- File srcFolder = new File("src");
- File testFolder = new File(srcFolder, "test");
- File dataFolder = new File(testFolder, "data");
- File imagesFolder = new File(dataFolder, "images");
-
- // 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\\");
-
- assertTrue(imagesFolder.exists());
-
- final List result = new ArrayList();
-
- FSTraversal.Visitor visitor = new FSTraversal.Visitor()
- {
- public boolean visit(File file, double progressEstimate)
- {
- if (Sanselan.hasImageFileExtension(file))
- result.add(file);
- return true;
- }
- };
- new FSTraversal().traverseFiles(imagesFolder, visitor);
-
- return result;
- }
+ // protected List getAllTestImages()
+ // {
+ // File srcFolder = new File("src");
+ // File testFolder = new File(srcFolder, "test");
+ // File dataFolder = new File(testFolder, "data");
+ // File imagesFolder = new File(dataFolder, "images");
+ //
+ //
+ // assertTrue(imagesFolder.exists());
+ //
+ // final List result = new ArrayList();
+ //
+ // FSTraversal.Visitor visitor = new FSTraversal.Visitor()
+ // {
+ // public boolean visit(File file, double progressEstimate)
+ // {
+ // if (Sanselan.hasImageFileExtension(file))
+ // result.add(file);
+ // return true;
+ // }
+ // };
+ // new FSTraversal().traverseFiles(imagesFolder, visitor);
+ //
+ // return result;
+ // }
public static interface ImageFilter
{
@@ -130,39 +126,67 @@
return getTestImages(filter, -1);
}
- protected List getTestImages(ImageFilter filter, int max)
+ protected List getTestImages(final ImageFilter filter, final int max)
throws IOException, ImageReadException
{
- List images = getAllTestImages();
+
+ File srcFolder = new File("src");
+ File testFolder = new File(srcFolder, "test");
+ File dataFolder = new File(testFolder, "data");
+ File imagesFolder = new File(dataFolder, "images");
- if (filter != null)
- {
- List filtered = new ArrayList();
-// long last = System.currentTimeMillis();
- for (int i = 0; i < images.size(); i++)
- {
- if(i%10==0)
- Debug.purgeMemory();
+ assertTrue(imagesFolder.exists());
- File file = (File) images.get(i);
-// Debug.debug("considering file", file.getAbsoluteFile());
+ final List images = new ArrayList();
- if (file.getParentFile().getName().toLowerCase().equals(
- "@broken"))
- continue;
+ FSTraversal.Visitor visitor = new FSTraversal.Visitor()
+ {
+ long counter = 0;
- if (filter.accept(file) )
+ public boolean visit(File file, double progressEstimate)
+ {
+ if (!Sanselan.hasImageFileExtension(file))
+ return true;
+ if (counter++ % 10 == 0)
+ Debug.purgeMemory();
+
+ try
{
- filtered.add(file);
- if (max > 0 && filtered.size() >= max)
- return filtered;
+ if (filter != null && !filter.accept(file))
+ return true;
}
+ catch (Exception e)
+ {
+ Debug.debug(e);
+ return false;
+ }
+
+ images.add(file);
+
+ if (max < 1)
+ return true;
+ return images.size() < max;
}
- images = filtered;
+ };
+ new FSTraversal().traverseFiles(imagesFolder, visitor);
+
+ List filtered = new ArrayList();
+ // long last = System.currentTimeMillis();
+ for (int i = 0; i < images.size(); i++)
+ {
+// 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;
+ filtered.add(file);
}
- assertTrue(images.size() > 0);
+ assertTrue(filtered.size() > 0);
- return images;
+ return filtered;
}
}
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java?rev=617857&r1=617856&r2=617857&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java Sat Feb 2 10:29:27 2008
@@ -28,10 +28,7 @@
public abstract class JpegBaseTest extends SanselanTest
{
- // public JpegBaseTest(String name)
- // {
- // super(name);
- // }
+
protected static boolean isJpeg(File file) throws IOException,
ImageReadException
@@ -40,7 +37,7 @@
return format == ImageFormat.IMAGE_FORMAT_JPEG;
}
- private static final ImageFilter imageFilter = new ImageFilter()
+ public static final ImageFilter imageFilter = new ImageFilter()
{
public boolean accept(File file) throws IOException, ImageReadException
{
@@ -48,10 +45,7 @@
}
};
- // protected File getJpegImage() throws IOException, ImageReadException
- // {
- // return getTestImage(imageFilter);
- // }
+
protected List getJpegImages() throws IOException, ImageReadException
{
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=617857&r1=617856&r2=617857&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 Sat Feb 2 10:29:27 2008
@@ -23,6 +23,7 @@
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.ImageWriteException;
+import org.apache.sanselan.formats.jpeg.JpegBaseTest;
import org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter;
import org.apache.sanselan.formats.tiff.constants.AllTagConstants;
import org.apache.sanselan.sampleUsage.WriteExifMetadataExample;
@@ -41,6 +42,38 @@
ImageWriteException
{
List images = getImagesWithExifData();
+ for (int i = 0; i < images.size(); i++)
+ {
+ if (i % 10 == 0)
+ Debug.purgeMemory();
+
+ File imageFile = (File) images.get(i);
+ Debug.debug("imageFile", imageFile.getAbsoluteFile());
+
+ File tempFile = File.createTempFile("test", ".jpg");
+ Debug.debug("tempFile", tempFile.getAbsoluteFile());
+ tempFile.deleteOnExit();
+
+ try
+ {
+ boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+ if (ignoreImageData)
+ continue;
+ new WriteExifMetadataExample().changeExifMetadata(imageFile,
+ tempFile);
+ }
+ catch (ExifRewriter.ExifOverflowException e)
+ {
+ Debug.debug("Error image", imageFile.getAbsoluteFile());
+ Debug.debug(e, 4);
+ }
+ }
+ }
+
+ public void testInsert() throws IOException, ImageReadException,
+ ImageWriteException
+ {
+ List images = getTestImages(JpegBaseTest.imageFilter);
for (int i = 0; i < images.size(); i++)
{
if (i % 10 == 0)