Mercurial > hg > digilib-old
comparison servlet/src/digilib/image/JAIImageLoaderDocuImage.java @ 588:aee436f0549d stream
more work on stream input
author | robcast |
---|---|
date | Thu, 06 Jan 2011 14:37:50 +0100 |
parents | fd2ef7e46119 |
children | 73e041c710d3 |
comparison
equal
deleted
inserted
replaced
587:720d061a1b30 | 588:aee436f0549d |
---|---|
36 import javax.imageio.stream.ImageInputStream; | 36 import javax.imageio.stream.ImageInputStream; |
37 import javax.media.jai.JAI; | 37 import javax.media.jai.JAI; |
38 import javax.servlet.ServletException; | 38 import javax.servlet.ServletException; |
39 | 39 |
40 import digilib.io.FileOpException; | 40 import digilib.io.FileOpException; |
41 import digilib.io.ImageFile; | 41 import digilib.io.ImageInput; |
42 | 42 |
43 /** DocuImage implementation using the Java Advanced Imaging API and the ImageLoader | 43 /** DocuImage implementation using the Java Advanced Imaging API and the ImageLoader |
44 * API of Java 1.4. | 44 * API of Java 1.4. |
45 */ | 45 */ |
46 public class JAIImageLoaderDocuImage extends JAIDocuImage { | 46 public class JAIImageLoaderDocuImage extends JAIDocuImage { |
78 return is; | 78 return is; |
79 } | 79 } |
80 | 80 |
81 | 81 |
82 /* Load an image file into the Object. */ | 82 /* Load an image file into the Object. */ |
83 public void loadImage(ImageFile f) throws FileOpException { | 83 public void loadImage(ImageInput ii) throws FileOpException { |
84 logger.debug("loadImage: "+f.getFile()); | 84 logger.debug("loadImage: "+ii.getFile()); |
85 //System.gc(); | 85 //System.gc(); |
86 img = JAI.create("ImageRead", f.getFile().getAbsolutePath()); | 86 img = JAI.create("ImageRead", ii.getFile().getAbsolutePath()); |
87 if (img == null) { | 87 if (img == null) { |
88 throw new FileOpException("Unable to load File!"); | 88 throw new FileOpException("Unable to load File!"); |
89 } | 89 } |
90 mimeType = f.getMimetype(); | |
91 } | 90 } |
92 | 91 |
93 /* Get an ImageReader for the image file. */ | 92 /* Get an ImageReader for the image file. */ |
94 public ImageReader getReader(ImageFile f) throws IOException { | 93 public ImageReader getReader(ImageInput input) throws IOException { |
95 logger.debug("preloadImage: "+f.getFile()); | 94 logger.debug("get ImageReader for " + input); |
96 //System.gc(); | 95 if (this.reader != null) { |
97 RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r"); | 96 if (this.input == input) { |
98 ImageInputStream istream = new FileImageInputStream(rf); | 97 // it was the same input |
99 //Iterator readers = ImageIO.getImageReaders(istream); | 98 logger.debug("reusing Reader"); |
100 Iterator<ImageReader> readers = ImageIO.getImageReadersByMIMEType(f.getMimetype()); | 99 return reader; |
101 if (! readers.hasNext()) { | 100 } |
102 throw new FileOpException("Unable to load File!"); | 101 // clean up old reader |
103 } | 102 logger.debug("cleaning Reader!"); |
104 reader = readers.next(); | 103 dispose(); |
105 logger.debug("JAIImageIO: this reader: " + reader.getClass()); | 104 } |
106 while (readers.hasNext()) { | 105 this.input = input; |
107 logger.debug(" next reader: " + readers.next().getClass()); | 106 ImageInputStream istream = null; |
108 } | 107 if (input.hasImageInputStream()) { |
109 reader.setInput(istream); | 108 // stream input |
110 return reader; | 109 istream = input.getImageInputStream(); |
110 } else if (input.hasFile()) { | |
111 // file only input | |
112 RandomAccessFile rf = new RandomAccessFile(input.getFile(), "r"); | |
113 istream = new FileImageInputStream(rf); | |
114 } else { | |
115 throw new FileOpException("Unable to get data from ImageInput"); | |
116 } | |
117 Iterator<ImageReader> readers; | |
118 String mt = input.getMimetype(); | |
119 if (mt == null) { | |
120 logger.debug("No mime-type. Trying automagic."); | |
121 readers = ImageIO.getImageReaders(istream); | |
122 } else { | |
123 logger.debug("File type:" + mt); | |
124 readers = ImageIO.getImageReadersByMIMEType(mt); | |
125 } | |
126 if (!readers.hasNext()) { | |
127 throw new FileOpException("Can't find Reader to load File!"); | |
128 } | |
129 reader = readers.next(); | |
130 /* are there more readers? */ | |
131 logger.debug("ImageIO: this reader: " + reader.getClass()); | |
132 /* while (readers.hasNext()) { | |
133 logger.debug("ImageIO: next reader: " + readers.next().getClass()); | |
134 } */ | |
135 reader.setInput(istream); | |
136 return reader; | |
111 } | 137 } |
112 | 138 |
113 /* Load an image file into the Object. */ | 139 /* Load an image file into the Object. */ |
114 public void loadSubimage(ImageFile f, Rectangle region, int prescale) | 140 public void loadSubimage(ImageInput ii, Rectangle region, int prescale) |
115 throws FileOpException { | 141 throws FileOpException { |
116 logger.debug("loadSubimage: "+f.getFile()); | 142 logger.debug("loadSubimage: "+ii.getFile()); |
117 //System.gc(); | 143 //System.gc(); |
118 try { | 144 try { |
119 if ((reader == null) || (imgFile != f.getFile())) { | 145 if ((reader == null) || (imgFile != ii.getFile())) { |
120 getReader(f); | 146 getReader(ii); |
121 } | 147 } |
122 ImageReadParam readParam = reader.getDefaultReadParam(); | 148 ImageReadParam readParam = reader.getDefaultReadParam(); |
123 readParam.setSourceRegion(region); | 149 readParam.setSourceRegion(region); |
124 readParam.setSourceSubsampling(prescale, prescale, 0, 0); | 150 readParam.setSourceSubsampling(prescale, prescale, 0, 0); |
125 img = reader.read(0, readParam); | 151 img = reader.read(0, readParam); |
135 throw new FileOpException("Unable to load File!"); | 161 throw new FileOpException("Unable to load File!"); |
136 } | 162 } |
137 if (img == null) { | 163 if (img == null) { |
138 throw new FileOpException("Unable to load File!"); | 164 throw new FileOpException("Unable to load File!"); |
139 } | 165 } |
140 imgFile = f.getFile(); | 166 imgFile = ii.getFile(); |
141 mimeType = f.getMimetype(); | |
142 } | 167 } |
143 | 168 |
144 | 169 |
145 /* Write the current image to an OutputStream. */ | 170 /* Write the current image to an OutputStream. */ |
146 public void writeImage(String mt, OutputStream ostream) | 171 public void writeImage(String mt, OutputStream ostream) |