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)