changeset 462:03ff7238c9d4

second try for flashpix support (doesn't work currently...)
author robcast
date Mon, 13 Feb 2006 13:01:42 +0100
parents 96bd3656e4a6
children d76a9e3f1ec9
files servlet/src/digilib/image/DocuImage.java servlet/src/digilib/image/DocuImageImpl.java servlet/src/digilib/image/ImageLoaderDocuImage.java servlet/src/digilib/image/ImageOps.java servlet/src/digilib/image/JAIDocuImage.java servlet/src/digilib/servlet/Initialiser.java servlet/src/digilib/servlet/Scaler.java
diffstat 7 files changed, 152 insertions(+), 89 deletions(-) [+]
line wrap: on
line diff
--- a/servlet/src/digilib/image/DocuImage.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/image/DocuImage.java	Mon Feb 13 13:01:42 2006 +0100
@@ -21,6 +21,7 @@
 package digilib.image;
 
 import java.awt.Rectangle;
+import java.io.IOException;
 import java.io.OutputStream;
 
 import digilib.io.ImageFile;
@@ -209,4 +210,9 @@
 	 */
 	public void dispose();
 
+    /**
+     * Check image size and type and store in ImageFile f
+     */
+    public boolean identify(ImageFile imgf) throws IOException;
+
 }
--- a/servlet/src/digilib/image/DocuImageImpl.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/image/DocuImageImpl.java	Mon Feb 13 13:01:42 2006 +0100
@@ -20,12 +20,17 @@
 
 package digilib.image;
 
+import digilib.io.ImageFileset;
 import java.awt.Rectangle;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
 
 import org.apache.log4j.Logger;
 
 import digilib.io.FileOpException;
 import digilib.io.ImageFile;
+import org.marcoschmidt.image.ImageInfo;
 
 /** Simple abstract implementation of the <code>DocuImage</code> interface.
  *
@@ -65,7 +70,35 @@
 		this.quality = quality;
 	}
 
-	/** Crop and scale the current image.
+    /** Check image size and type and store in ImageFile f */
+    public boolean identify(ImageFile imgf) throws IOException {
+        // fileset to store the information
+        ImageFileset imgfs = imgf.getParent();
+        File f = imgf.getFile();
+        if (f == null) {
+            throw new IOException("File not found!");
+        }
+        RandomAccessFile raf = new RandomAccessFile(f, "r");
+        // set up ImageInfo object
+        ImageInfo iif = new ImageInfo();
+        iif.setInput(raf);
+        iif.setCollectComments(false);
+        iif.setDetermineImageNumber(false);
+        logger.debug("identifying (ImageInfo) " + f);
+        // try with ImageInfo first
+        if (iif.check()) {
+            ImageSize d = new ImageSize(iif.getWidth(), iif.getHeight());
+            imgf.setSize(d);
+            imgf.setMimetype(iif.getMimeType());
+            //logger.debug("  format:"+iif.getFormatName());
+            raf.close();
+            logger.debug("image size: " + imgf.getSize());
+            return true;
+        }
+        return false;
+    }
+        
+    /** Crop and scale the current image.
 	 *
 	 * The current image is cropped to a rectangle of width, height at position
 	 * x_off, y_off. The resulting image is scaled by the factor scale using the
--- a/servlet/src/digilib/image/ImageLoaderDocuImage.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/image/ImageLoaderDocuImage.java	Mon Feb 13 13:01:42 2006 +0100
@@ -19,6 +19,8 @@
 
 package digilib.image;
 
+import digilib.io.FileOps;
+import digilib.io.ImageFileset;
 import java.awt.Rectangle;
 import java.awt.RenderingHints;
 import java.awt.geom.AffineTransform;
@@ -46,6 +48,7 @@
 
 import digilib.io.FileOpException;
 import digilib.io.ImageFile;
+import org.marcoschmidt.image.ImageInfo;
 
 /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */
 public class ImageLoaderDocuImage extends DocuImageImpl {
@@ -112,10 +115,61 @@
 		return w;
 	}
 
-	/* load image file */
+    /** Check image size and type and store in ImageFile f */
+    public boolean identify(ImageFile imgf) throws IOException {
+        // try parent method first
+        if (super.identify(imgf)) {
+            return true;
+        }
+        // fileset to store the information
+        ImageFileset imgfs = imgf.getParent();
+        File f = imgf.getFile();
+        if (f == null) {
+            throw new IOException("File not found!");
+        }
+        logger.debug("identifying (ImageIO) " + f);
+        /*
+         * try ImageReader
+         */
+        RandomAccessFile raf = new RandomAccessFile(f, "r");
+        ImageInputStream istream = ImageIO.createImageInputStream(raf);
+        Iterator readers = ImageIO.getImageReaders(istream);
+        if (readers.hasNext()) {
+            ImageReader reader = (ImageReader) readers.next();
+            /* are there more readers? */
+            logger.debug("ImageIO: this reader: " + reader.getClass());
+            while (readers.hasNext()) {
+                logger.debug("ImageIO: next reader: "
+                        + readers.next().getClass());
+            }
+            try {
+                reader.setInput(istream);
+                ImageSize d = new ImageSize(reader.getWidth(0), reader.getHeight(0));
+                imgf.setSize(d);
+                //String t = reader.getFormatName();
+                String t = FileOps.mimeForFile(f);
+                imgf.setMimetype(t);
+                //logger.debug("  format:"+t);
+                if (imgfs != null) {
+                    imgfs.setAspect(d);
+                }
+                return true;
+            } finally {
+                // dispose the reader to free resources
+                reader.dispose();
+                raf.close();
+            }
+        }
+        return false;
+//        } catch (Exception e) {
+//            throw new FileOpException("ERROR: unknown image file format!");
+//        }
+    }
+
+    
+    /* load image file */
 	public void loadImage(ImageFile f) throws FileOpException {
 		logger.debug("loadImage " + f.getFile());
-		// System.gc();
 		try {
 			img = ImageIO.read(f.getFile());
 			if (img == null) {
--- a/servlet/src/digilib/image/ImageOps.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/image/ImageOps.java	Mon Feb 13 13:01:42 2006 +0100
@@ -48,91 +48,21 @@
     
     private static Logger logger = Logger.getLogger(ImageOps.class);
     
-    public static int TYPE_AUTO = 0;
-    public static int TYPE_JPEG = 1;
-    public static int TYPE_PNG = 2;
+    public static final int TYPE_AUTO = 0;
+    public static final int TYPE_JPEG = 1;
+    public static final int TYPE_PNG = 2;
     
+    private static DocuImage docuImg;
     
-    /** Check image size and type and store in ImageFile f */
     public static boolean checkFile(ImageFile imgf) throws IOException {
-        // fileset to store the information
-        ImageFileset imgfs = imgf.getParent();
-        File f = imgf.getFile();
-        if (f == null) {
-            throw new IOException("File not found!");
-        }
-        RandomAccessFile raf = new RandomAccessFile(f, "r");
-        // set up ImageInfo object
-        ImageInfo iif = new ImageInfo();
-        iif.setInput(raf);
-        iif.setCollectComments(false);
-        iif.setDetermineImageNumber(false);
-        logger.debug("identifying (ImageInfo) " + f);
-        // try with ImageInfo first
-        if (iif.check()) {
-            ImageSize d = new ImageSize(iif.getWidth(), iif.getHeight());
-            imgf.setSize(d);
-            imgf.setMimetype(iif.getMimeType());
-            //logger.debug("  format:"+iif.getFormatName());
-            if (imgfs != null) {
-                imgfs.setAspect(d);
-            }
-            raf.close();
-            logger.debug("image size: " + imgf.getSize());
-            return true;
-        }
-        
-        logger.debug("identifying (ImageIO) " + f);
-        /*
-         * else try ImageReader
-         */
-        ImageInputStream istream = ImageIO.createImageInputStream(raf);
-        Iterator readers = ImageIO.getImageReaders(istream);
-        if (readers.hasNext()) {
-            ImageReader reader = (ImageReader) readers.next();
-            /* are there more readers? */
-            logger.debug("ImageIO: this reader: " + reader.getClass());
-            while (readers.hasNext()) {
-                logger.debug("ImageIO: next reader: "
-                        + readers.next().getClass());
-            }
-            try {
-                reader.setInput(istream);
-                ImageSize d = new ImageSize(reader.getWidth(0), reader.getHeight(0));
-                imgf.setSize(d);
-                //String t = reader.getFormatName();
-                String t = FileOps.mimeForFile(f);
-                imgf.setMimetype(t);
-                //logger.debug("  format:"+t);
-                if (imgfs != null) {
-                    imgfs.setAspect(d);
-                }
-                return true;
-            } finally {
-                // dispose the reader to free resources
-                reader.dispose();
-                raf.close();
-            }
-        }
-        /*
-         * else try JAI
-         */
-        logger.debug("identifying (JAI) " + f);
-        try {
-            RenderedOp img = JAI.create("fileload", f.getAbsolutePath());
-            ImageSize d = new ImageSize(img.getWidth(), img.getHeight());
-            imgf.setSize(d);
-            String t = FileOps.mimeForFile(f);
-            imgf.setMimetype(t);
-            //logger.debug("  format:"+t);
-            if (imgfs != null) {
-                imgfs.setAspect(d);
-            }
-            logger.debug("image size: " + imgf.getSize());
-            return true;
-        } catch (Exception e) {
-            throw new FileOpException("ERROR: unknown image file format!");
-        }
+        return docuImg.identify(imgf);
     }
     
+    public static void setDocuImage(DocuImage di) {
+        docuImg = di;
+    }
+    
+    public static DocuImage getDocuImage() {
+        return docuImg;
+    }
 }
--- a/servlet/src/digilib/image/JAIDocuImage.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/image/JAIDocuImage.java	Mon Feb 13 13:01:42 2006 +0100
@@ -20,22 +20,28 @@
 
 package digilib.image;
 
+import digilib.io.FileOps;
+import digilib.io.ImageFileset;
 import java.awt.RenderingHints;
 import java.awt.image.RenderedImage;
 import java.awt.image.renderable.ParameterBlock;
+import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.RandomAccessFile;
 
 import javax.media.jai.BorderExtender;
 import javax.media.jai.Interpolation;
 import javax.media.jai.JAI;
 import javax.media.jai.KernelJAI;
 import javax.media.jai.ParameterBlockJAI;
+import javax.media.jai.RenderedOp;
 import javax.media.jai.operator.TransposeDescriptor;
 import javax.media.jai.operator.TransposeType;
 
 import digilib.io.ImageFile;
 import digilib.io.FileOpException;
+import org.marcoschmidt.image.ImageInfo;
 
 /** A DocuImage implementation using Java Advanced Imaging Library. */
 public class JAIDocuImage extends DocuImageImpl {
@@ -43,9 +49,41 @@
 	protected RenderedImage img;
 	protected Interpolation interpol = null;
 
-	/* Load an image file into the Object. */
+    /** Check image size and type and store in ImageFile f */
+    public boolean identify(ImageFile imgf) throws IOException {
+        // try parent method first
+        if (super.identify(imgf)) {
+            return true;
+        }
+        // fileset to store the information
+        ImageFileset imgfs = imgf.getParent();
+        File f = imgf.getFile();
+        if (f == null) {
+            throw new IOException("File not found!");
+        }
+        /*
+         * try JAI
+         */
+        logger.debug("identifying (JAI) " + f);
+        try {
+            RenderedOp img = JAI.create("fileload", f.getAbsolutePath());
+            ImageSize d = new ImageSize(img.getWidth(), img.getHeight());
+            imgf.setSize(d);
+            String t = FileOps.mimeForFile(f);
+            imgf.setMimetype(t);
+            //logger.debug("  format:"+t);
+            if (imgfs != null) {
+                imgfs.setAspect(d);
+            }
+            logger.debug("image size: " + imgf.getSize());
+            return true;
+        } catch (Exception e) {
+            throw new FileOpException("ERROR: unknown image file format!");
+        }
+    }
+
+    /* Load an image file into the Object. */
 	public void loadImage(ImageFile f) throws FileOpException {
-		System.gc();
 		img = JAI.create("fileload", f.getFile().getAbsolutePath());
 		if (img == null) {
 			throw new FileOpException("Unable to load File!");
--- a/servlet/src/digilib/servlet/Initialiser.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/servlet/Initialiser.java	Mon Feb 13 13:01:42 2006 +0100
@@ -20,6 +20,7 @@
  */
 package digilib.servlet;
 
+import digilib.image.ImageOps;
 import java.io.File;
 
 import javax.servlet.ServletConfig;
@@ -49,7 +50,7 @@
 	private static final long serialVersionUID = -5126621114382549343L;
 
 	/** servlet version */
-	public static final String iniVersion = "0.1b1";
+	public static final String iniVersion = "0.1b2";
 
 	/** gengeral logger for this class */
 	private static Logger logger = Logger.getLogger("digilib.init");
@@ -133,6 +134,7 @@
 						.getAsString("docuimage-class"));
 				dlConfig.setDocuImageClass(cl);
 				dlConfig.setValue("servlet.docuimage.class", cl.getName());
+                ImageOps.setDocuImage(dlConfig.getDocuImageInstance());
 				// worker threads
 				int nt = dlConfig.getAsInt("worker-threads");
 				Semaphore lck = new FIFOSemaphore(nt); 
--- a/servlet/src/digilib/servlet/Scaler.java	Wed Feb 08 20:30:49 2006 +0100
+++ b/servlet/src/digilib/servlet/Scaler.java	Mon Feb 13 13:01:42 2006 +0100
@@ -59,7 +59,7 @@
 	private static final long serialVersionUID = -325080527268912852L;
 
 	/** digilib servlet version (for all components) */
-	public static final String dlVersion = "1.5.9h";
+	public static final String dlVersion = "1.5.10h";
 
 	/** logger for accounting requests */
 	private static Logger accountlog = Logger.getLogger("account.request");