Mercurial > hg > digilib-old
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 } |