comparison servlet/src/digilib/image/ImageOps.java @ 281:60a064f27d25

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