Mercurial > hg > digilib-old
changeset 462:03ff7238c9d4
second try for flashpix support (doesn't work currently...)
author | robcast |
---|---|
date | Mon, 13 Feb 2006 13:01:42 +0100 (2006-02-13) |
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");