Mercurial > hg > digilib-old
annotate servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java @ 263:e16d132aa6f6
Servlet version 1.21b1
- directory indexing got faster but less safe
(configurable by "safe-dir-index")
- mo=rawfile supplies filename
- DigilibConfig takes File parameters
- some SerialVersionUIDs (suggested by Eclipse)
author | robcast |
---|---|
date | Mon, 11 Oct 2004 21:23:00 +0200 |
parents | 85a0abfa1b8c |
children |
rev | line source |
---|---|
220 | 1 /* |
2 * ImageLoaderImageInfoDocuInfo -- DocuInfo implementation using ImageInfo and | |
3 * ImageLoader API | |
4 * | |
5 * Digital Image Library servlet components | |
6 * | |
7 * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de) | |
8 * | |
9 * This program is free software; you can redistribute it and/or modify it under | |
10 * the terms of the GNU General Public License as published by the Free Software | |
11 * Foundation; either version 2 of the License, or (at your option) any later | |
12 * version. | |
13 * | |
14 * Please read license.txt for the full details. A copy of the GPL may be found | |
15 * at http://www.gnu.org/copyleft/lgpl.html | |
16 * | |
17 * You should have received a copy of the GNU General Public License along with | |
18 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | |
19 * Place, Suite 330, Boston, MA 02111-1307 USA | |
20 * | |
149 | 21 * Created on 11.06.2003 |
22 */ | |
23 package digilib.image; | |
159 | 24 import java.io.File; |
149 | 25 import java.io.IOException; |
26 import java.io.RandomAccessFile; | |
27 import java.util.Iterator; | |
28 import javax.imageio.ImageIO; | |
29 import javax.imageio.ImageReader; | |
30 import javax.imageio.stream.ImageInputStream; | |
181 | 31 import org.apache.log4j.Logger; |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
32 import org.marcoschmidt.image.ImageInfo; |
156 | 33 import digilib.io.FileOpException; |
149 | 34 import digilib.io.FileOps; |
159 | 35 import digilib.io.ImageFile; |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
36 import digilib.io.ImageFileset; |
149 | 37 /** |
38 * @author casties | |
220 | 39 * |
149 | 40 */ |
41 public class ImageLoaderImageInfoDocuInfo implements DocuInfo { | |
181 | 42 private Logger logger = Logger.getLogger(this.getClass()); |
159 | 43 /* check image size and type and store in ImageFile f */ |
44 public boolean checkFile(ImageFile imgf) throws IOException { | |
205 | 45 // fileset to store the information |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
46 ImageFileset imgfs = imgf.getParent(); |
159 | 47 File f = imgf.getFile(); |
48 if (f == null) { | |
49 throw new IOException("File not found!"); | |
50 } | |
51 RandomAccessFile raf = new RandomAccessFile(f, "r"); | |
149 | 52 // set up ImageInfo object |
53 ImageInfo iif = new ImageInfo(); | |
54 iif.setInput(raf); | |
55 iif.setCollectComments(false); | |
56 iif.setDetermineImageNumber(false); | |
220 | 57 logger.debug("identifying (ImageInfo) " + f); |
149 | 58 // try with ImageInfo first |
59 if (iif.check()) { | |
220 | 60 ImageSize d = new ImageSize(iif.getWidth(), iif.getHeight()); |
159 | 61 imgf.setSize(d); |
62 imgf.setMimetype(iif.getMimeType()); | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
63 if (imgfs != null) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
64 imgfs.setAspect(d); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
65 } |
149 | 66 raf.close(); |
67 } else { | |
220 | 68 logger.debug("identifying (ImageIO) " + f); |
69 /* | |
70 * else use ImageReader | |
71 */ | |
149 | 72 ImageInputStream istream = ImageIO.createImageInputStream(raf); |
73 Iterator readers = ImageIO.getImageReaders(istream); | |
220 | 74 if ((readers == null) || (!readers.hasNext())) { |
156 | 75 throw new FileOpException("ERROR: unknown image file format!"); |
76 } | |
149 | 77 ImageReader reader = (ImageReader) readers.next(); |
78 /* are there more readers? */ | |
205 | 79 logger.debug("ImageIO: this reader: " + reader.getClass()); |
149 | 80 while (readers.hasNext()) { |
220 | 81 logger.debug("ImageIO: next reader: " |
82 + readers.next().getClass()); | |
149 | 83 } |
84 reader.setInput(istream); | |
220 | 85 ImageSize d = new ImageSize(reader.getWidth(0), reader.getHeight(0)); |
159 | 86 imgf.setSize(d); |
149 | 87 String t = reader.getFormatName(); |
159 | 88 t = FileOps.mimeForFile(f); |
89 imgf.setMimetype(t); | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
90 if (imgfs != null) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
91 imgfs.setAspect(d); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
159
diff
changeset
|
92 } |
149 | 93 // dispose the reader to free resources |
94 reader.dispose(); | |
205 | 95 raf.close(); |
149 | 96 } |
257 | 97 logger.debug("image size: " + imgf.getSize()); |
149 | 98 return true; |
99 } | |
220 | 100 } |