# HG changeset patch # User robcast # Date 1097852387 -7200 # Node ID 60a064f27d25e4bf3efb421d8952162f7b84f699 # Parent eae7511655550847351ba253057d9b0ec63b6b56 Servlet version 1.22b1 - more fast searching (hopefully all working now) - some simple synchronisation - some reshuffling of methods to eliminate cruft diff -r eae751165555 -r 60a064f27d25 servlet/src/digilib/image/ImageOps.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet/src/digilib/image/ImageOps.java Fri Oct 15 16:59:47 2004 +0200 @@ -0,0 +1,112 @@ +/* ImageOps -- convenience methods for images + + Digital Image Library servlet components + + Copyright (C) 2004 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 13.10.2004 + */ +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; + +/** + * convenience methods for images + * + * @author casties + */ +public class ImageOps { + + private static Logger logger = Logger.getLogger(ImageOps.class); + + /** 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(); + iif = null; + } else { + iif = null; + logger.debug("identifying (ImageIO) " + f); + /* + * else use ImageReader + */ + ImageInputStream istream = ImageIO.createImageInputStream(raf); + Iterator readers = ImageIO.getImageReaders(istream); + 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()); + } + 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); + } + // dispose the reader to free resources + reader.dispose(); + raf.close(); + reader = null; + } + logger.debug("image size: " + imgf.getSize()); + return true; + } + +}