comparison servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java @ 220:c4ee5f0c3a77

servlet version 1.18b12 - small fix in DocuDirectory.get
author robcast
date Tue, 29 Jun 2004 12:16:50 +0200
parents 6221d688eab6
children 85a0abfa1b8c
comparison
equal deleted inserted replaced
219:e6183215c9d9 220:c4ee5f0c3a77
1 /* ImageLoaderImageInfoDocuInfo -- DocuInfo implementation using ImageInfo and ImageLoader API 1 /*
2 2 * ImageLoaderImageInfoDocuInfo -- DocuInfo implementation using ImageInfo and
3 Digital Image Library servlet components 3 * ImageLoader API
4 4 *
5 Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de) 5 * Digital Image Library servlet components
6 6 *
7 This program is free software; you can redistribute it and/or modify it 7 * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
8 under the terms of the GNU General Public License as published by the 8 *
9 Free Software Foundation; either version 2 of the License, or (at your 9 * This program is free software; you can redistribute it and/or modify it under
10 option) any later version. 10 * the terms of the GNU General Public License as published by the Free Software
11 11 * Foundation; either version 2 of the License, or (at your option) any later
12 Please read license.txt for the full details. A copy of the GPL 12 * version.
13 may be found at http://www.gnu.org/copyleft/lgpl.html 13 *
14 14 * Please read license.txt for the full details. A copy of the GPL may be found
15 You should have received a copy of the GNU General Public License 15 * at http://www.gnu.org/copyleft/lgpl.html
16 along with this program; if not, write to the Free Software 16 *
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 * You should have received a copy of the GNU General Public License along with
18 18 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19 * Place, Suite 330, Boston, MA 02111-1307 USA
20 *
19 * Created on 11.06.2003 21 * Created on 11.06.2003
20 */ 22 */
21 package digilib.image; 23 package digilib.image;
22
23 import java.io.File; 24 import java.io.File;
24 import java.io.IOException; 25 import java.io.IOException;
25 import java.io.RandomAccessFile; 26 import java.io.RandomAccessFile;
26 import java.util.Iterator; 27 import java.util.Iterator;
27
28 import javax.imageio.ImageIO; 28 import javax.imageio.ImageIO;
29 import javax.imageio.ImageReader; 29 import javax.imageio.ImageReader;
30 import javax.imageio.stream.ImageInputStream; 30 import javax.imageio.stream.ImageInputStream;
31
32 import org.apache.log4j.Logger; 31 import org.apache.log4j.Logger;
33 import org.marcoschmidt.image.ImageInfo; 32 import org.marcoschmidt.image.ImageInfo;
34
35 import digilib.io.FileOpException; 33 import digilib.io.FileOpException;
36 import digilib.io.FileOps; 34 import digilib.io.FileOps;
37 import digilib.io.ImageFile; 35 import digilib.io.ImageFile;
38 import digilib.io.ImageFileset; 36 import digilib.io.ImageFileset;
39
40 /** 37 /**
41 * @author casties 38 * @author casties
42 * 39 *
43 */ 40 */
44 public class ImageLoaderImageInfoDocuInfo implements DocuInfo { 41 public class ImageLoaderImageInfoDocuInfo implements DocuInfo {
45
46 private Logger logger = Logger.getLogger(this.getClass()); 42 private Logger logger = Logger.getLogger(this.getClass());
47
48 /* check image size and type and store in ImageFile f */ 43 /* check image size and type and store in ImageFile f */
49 public boolean checkFile(ImageFile imgf) throws IOException { 44 public boolean checkFile(ImageFile imgf) throws IOException {
50 // fileset to store the information 45 // fileset to store the information
51 ImageFileset imgfs = imgf.getParent(); 46 ImageFileset imgfs = imgf.getParent();
52 File f = imgf.getFile(); 47 File f = imgf.getFile();
57 // set up ImageInfo object 52 // set up ImageInfo object
58 ImageInfo iif = new ImageInfo(); 53 ImageInfo iif = new ImageInfo();
59 iif.setInput(raf); 54 iif.setInput(raf);
60 iif.setCollectComments(false); 55 iif.setCollectComments(false);
61 iif.setDetermineImageNumber(false); 56 iif.setDetermineImageNumber(false);
62 logger.debug("identifying (ImageInfo) "+f); 57 logger.debug("identifying (ImageInfo) " + f);
63 // try with ImageInfo first 58 // try with ImageInfo first
64 if (iif.check()) { 59 if (iif.check()) {
65 ImageSize d = 60 ImageSize d = new ImageSize(iif.getWidth(), iif.getHeight());
66 new ImageSize(iif.getWidth(), iif.getHeight());
67 imgf.setSize(d); 61 imgf.setSize(d);
68 imgf.setMimetype(iif.getMimeType()); 62 imgf.setMimetype(iif.getMimeType());
69 if (imgfs != null) { 63 if (imgfs != null) {
70 imgfs.setAspect(d); 64 imgfs.setAspect(d);
71 } 65 }
72 raf.close(); 66 raf.close();
73 } else { 67 } else {
74 logger.debug("identifying (ImageIO) "+f); 68 logger.debug("identifying (ImageIO) " + f);
75 // else use ImageReader 69 /*
70 * else use ImageReader
71 */
76 ImageInputStream istream = ImageIO.createImageInputStream(raf); 72 ImageInputStream istream = ImageIO.createImageInputStream(raf);
77 Iterator readers = ImageIO.getImageReaders(istream); 73 Iterator readers = ImageIO.getImageReaders(istream);
78 //String ext = f.getName().substring(f.getName().lastIndexOf('.')+1); 74 if ((readers == null) || (!readers.hasNext())) {
79 //Iterator readers = ImageIO.getImageReadersBySuffix(ext);
80 if (! readers.hasNext()) {
81 throw new FileOpException("ERROR: unknown image file format!"); 75 throw new FileOpException("ERROR: unknown image file format!");
82 } 76 }
83 ImageReader reader = (ImageReader) readers.next(); 77 ImageReader reader = (ImageReader) readers.next();
84 /* are there more readers? */ 78 /* are there more readers? */
85 logger.debug("ImageIO: this reader: " + reader.getClass()); 79 logger.debug("ImageIO: this reader: " + reader.getClass());
86 while (readers.hasNext()) { 80 while (readers.hasNext()) {
87 logger.debug("ImageIO: next reader: " + readers.next().getClass()); 81 logger.debug("ImageIO: next reader: "
82 + readers.next().getClass());
88 } 83 }
89 reader.setInput(istream); 84 reader.setInput(istream);
90 ImageSize d = 85 ImageSize d = new ImageSize(reader.getWidth(0), reader.getHeight(0));
91 new ImageSize(reader.getWidth(0), reader.getHeight(0));
92 imgf.setSize(d); 86 imgf.setSize(d);
93 String t = reader.getFormatName(); 87 String t = reader.getFormatName();
94 t = FileOps.mimeForFile(f); 88 t = FileOps.mimeForFile(f);
95 imgf.setMimetype(t); 89 imgf.setMimetype(t);
96 if (imgfs != null) { 90 if (imgfs != null) {
98 } 92 }
99 // dispose the reader to free resources 93 // dispose the reader to free resources
100 reader.dispose(); 94 reader.dispose();
101 raf.close(); 95 raf.close();
102 } 96 }
97 logger.debug("image size: " + imgf.getSize().getWidth() + "x"
98 + imgf.getSize().getHeight());
103 return true; 99 return true;
104 } 100 }
105
106 } 101 }