changeset 220:c4ee5f0c3a77

servlet version 1.18b12 - small fix in DocuDirectory.get
author robcast
date Tue, 29 Jun 2004 12:16:50 +0200
parents e6183215c9d9
children 59a2bc922652
files servlet/src/digilib/image/ImageLoaderDocuImage.java servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java servlet/src/digilib/image/JAIImageLoaderDocuImage.java servlet/src/digilib/io/DocuDirectory.java servlet/src/digilib/servlet/Scaler.java
diffstat 5 files changed, 53 insertions(+), 51 deletions(-) [+]
line wrap: on
line diff
--- a/servlet/src/digilib/image/ImageLoaderDocuImage.java	Tue Jun 29 12:09:53 2004 +0200
+++ b/servlet/src/digilib/image/ImageLoaderDocuImage.java	Tue Jun 29 12:16:50 2004 +0200
@@ -37,6 +37,7 @@
 import javax.imageio.ImageIO;
 import javax.imageio.ImageReadParam;
 import javax.imageio.ImageReader;
+import javax.imageio.stream.FileImageInputStream;
 import javax.imageio.stream.ImageInputStream;
 
 import digilib.io.FileOpException;
@@ -125,11 +126,11 @@
 		}
 		//System.gc();
 		RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r");
-		ImageInputStream istream = ImageIO.createImageInputStream(rf);
-		//Iterator readers = ImageIO.getImageReaders(istream);
+		ImageInputStream istream = new FileImageInputStream(rf);
+		Iterator readers = ImageIO.getImageReaders(istream);
 		//String ext = f.getName().substring(f.getName().lastIndexOf('.')+1);
 		//Iterator readers = ImageIO.getImageReadersBySuffix(ext);
-		Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype());
+		//Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype());
 		reader = (ImageReader) readers.next();
 		/* are there more readers? */
 		logger.debug("ImageIO: this reader: " + reader.getClass());
@@ -156,7 +157,9 @@
 			// set up reader parameters
 			ImageReadParam readParam = reader.getDefaultReadParam();
 			readParam.setSourceRegion(region);
-			readParam.setSourceSubsampling(prescale, prescale, 0, 0);
+			if (prescale > 1) {
+				readParam.setSourceSubsampling(prescale, prescale, 0, 0);
+			}
 			// read image
 			logger.debug("loading..");
 			img = reader.read(0, readParam);
@@ -228,14 +231,16 @@
 				renderHint);
 		BufferedImage scaledImg = null;
 		// enforce destination image type (*Java2D BUG*)
-		if (quality > 0) {
+		int type = img.getType();
+		// FIXME: which type would be best?
+		if ((quality > 0)&&(type != 0)) {
 			logger.debug("creating destination image");
 			Rectangle2D dstBounds = scaleOp.getBounds2D(img);
 			scaledImg =
 				new BufferedImage(
 					(int) dstBounds.getWidth(),
 					(int) dstBounds.getHeight(),
-					img.getType());
+					type);
 		}
 		logger.debug("scaling...");
 		scaledImg = scaleOp.filter(img, scaledImg);
@@ -259,6 +264,7 @@
 		logger.debug("blur: " + radius);
 		// minimum radius is 2
 		int klen = Math.max(radius, 2);
+		// FIXME: use constant kernels for most common sizes
 		int ksize = klen * klen;
 		// kernel is constant 1/k
 		float f = 1f / ksize;
--- a/servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java	Tue Jun 29 12:09:53 2004 +0200
+++ b/servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java	Tue Jun 29 12:16:50 2004 +0200
@@ -1,50 +1,45 @@
-/* ImageLoaderImageInfoDocuInfo -- DocuInfo implementation using ImageInfo and ImageLoader API
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
+/*
+ * ImageLoaderImageInfoDocuInfo -- DocuInfo implementation using ImageInfo and
+ * ImageLoader API
+ * 
+ * Digital Image Library servlet components
+ * 
+ * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+ * 
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ * 
+ * Please read license.txt for the full details. A copy of the GPL may be found
+ * at http://www.gnu.org/copyleft/lgpl.html
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
  * Created on 11.06.2003
  */
 package digilib.image;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.util.Iterator;
-
 import javax.imageio.ImageIO;
 import javax.imageio.ImageReader;
 import javax.imageio.stream.ImageInputStream;
-
 import org.apache.log4j.Logger;
 import org.marcoschmidt.image.ImageInfo;
-
 import digilib.io.FileOpException;
 import digilib.io.FileOps;
 import digilib.io.ImageFile;
 import digilib.io.ImageFileset;
-
 /**
  * @author casties
- *
+ *  
  */
 public class ImageLoaderImageInfoDocuInfo implements DocuInfo {
-	
 	private Logger logger = Logger.getLogger(this.getClass());
-
 	/* check image size and type and store in ImageFile f */
 	public boolean checkFile(ImageFile imgf) throws IOException {
 		// fileset to store the information
@@ -59,11 +54,10 @@
 		iif.setInput(raf);
 		iif.setCollectComments(false);
 		iif.setDetermineImageNumber(false);
-		logger.debug("identifying (ImageInfo) "+f);
+		logger.debug("identifying (ImageInfo) " + f);
 		// try with ImageInfo first
 		if (iif.check()) {
-			ImageSize d =
-				new ImageSize(iif.getWidth(), iif.getHeight());
+			ImageSize d = new ImageSize(iif.getWidth(), iif.getHeight());
 			imgf.setSize(d);
 			imgf.setMimetype(iif.getMimeType());
 			if (imgfs != null) {
@@ -71,24 +65,24 @@
 			}
 			raf.close();
 		} else {
-			logger.debug("identifying (ImageIO) "+f);
-			// else use ImageReader
+			logger.debug("identifying (ImageIO) " + f);
+			/*
+			 * else use ImageReader
+			 */
 			ImageInputStream istream = ImageIO.createImageInputStream(raf);
 			Iterator readers = ImageIO.getImageReaders(istream);
-			//String ext = f.getName().substring(f.getName().lastIndexOf('.')+1);
-			//Iterator readers = ImageIO.getImageReadersBySuffix(ext);
-			if (! readers.hasNext()) {
+			if ((readers == null) || (!readers.hasNext())) {
 				throw new FileOpException("ERROR: unknown image file format!");
 			}
 			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());
+				logger.debug("ImageIO: next reader: "
+						+ readers.next().getClass());
 			}
 			reader.setInput(istream);
-			ImageSize d =
-				new ImageSize(reader.getWidth(0), reader.getHeight(0));
+			ImageSize d = new ImageSize(reader.getWidth(0), reader.getHeight(0));
 			imgf.setSize(d);
 			String t = reader.getFormatName();
 			t = FileOps.mimeForFile(f);
@@ -100,7 +94,8 @@
 			reader.dispose();
 			raf.close();
 		}
+		logger.debug("image size: " + imgf.getSize().getWidth() + "x"
+				+ imgf.getSize().getHeight());
 		return true;
 	}
-
-}
+}
\ No newline at end of file
--- a/servlet/src/digilib/image/JAIImageLoaderDocuImage.java	Tue Jun 29 12:09:53 2004 +0200
+++ b/servlet/src/digilib/image/JAIImageLoaderDocuImage.java	Tue Jun 29 12:16:50 2004 +0200
@@ -31,11 +31,12 @@
 import javax.imageio.ImageIO;
 import javax.imageio.ImageReadParam;
 import javax.imageio.ImageReader;
+import javax.imageio.stream.FileImageInputStream;
 import javax.imageio.stream.ImageInputStream;
 import javax.media.jai.JAI;
 
+import digilib.io.FileOpException;
 import digilib.io.ImageFile;
-import digilib.io.FileOpException;
 
 /** DocuImage implementation using the Java Advanced Imaging API and the ImageLoader
  * API of Java 1.4.
@@ -95,9 +96,9 @@
 		logger.debug("preloadImage: "+f.getFile());
 		//System.gc();
 		RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r");
-		ImageInputStream istream = ImageIO.createImageInputStream(rf);
-		//Iterator readers = ImageIO.getImageReaders(istream);
-		Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype());
+		ImageInputStream istream = new FileImageInputStream(rf);
+		Iterator readers = ImageIO.getImageReaders(istream);
+		//Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype());
 		reader = (ImageReader) readers.next();
 		if (reader == null) {
 			throw new FileOpException("Unable to load File!");
--- a/servlet/src/digilib/io/DocuDirectory.java	Tue Jun 29 12:09:53 2004 +0200
+++ b/servlet/src/digilib/io/DocuDirectory.java	Tue Jun 29 12:16:50 2004 +0200
@@ -117,7 +117,7 @@
 	 * @return
 	 */
 	public ImageFileset get(int index) {
-		if ((list == null) || (list[0] != null) || (index >= list[0].size())) {
+		if ((list == null) || (list[0] == null) || (index >= list[0].size())) {
 			return null;
 		}
 		return (ImageFileset) list[0].get(index);
--- a/servlet/src/digilib/servlet/Scaler.java	Tue Jun 29 12:09:53 2004 +0200
+++ b/servlet/src/digilib/servlet/Scaler.java	Tue Jun 29 12:16:50 2004 +0200
@@ -59,7 +59,7 @@
 public class Scaler extends HttpServlet {
 
 	// digilib servlet version (for all components)
-	public static final String dlVersion = "1.18b9";
+	public static final String dlVersion = "1.18b12";
 
 	// logger for accounting requests
 	Logger accountlog = Logger.getLogger("account.request");