2222
2323package com .adobe .epubcheck .bitmap ;
2424
25- import java .awt .image .BufferedImage ;
2625import java .io .File ;
2726import java .io .FileOutputStream ;
2827import java .io .IOException ;
3130
3231import javax .imageio .ImageIO ;
3332import javax .imageio .ImageReader ;
33+ import javax .imageio .stream .FileImageInputStream ;
3434import javax .imageio .stream .ImageInputStream ;
3535
3636import com .adobe .epubcheck .api .EPUBLocation ;
@@ -119,6 +119,7 @@ public ImageHeuristics getImageSizes(String imgFileName) throws
119119 tempFile = getImageFile (ocf , imgFileName );
120120 String formatFromInputStream = null ;
121121 String formatFromSuffix = null ;
122+ ImageReader reader = null ;
122123 ImageInputStream imageInputStream = ImageIO .createImageInputStream (tempFile );
123124 Iterator <ImageReader > imageReaderIteratorFromInputStream = ImageIO .getImageReaders (imageInputStream );
124125 while (imageReaderIteratorFromInputStream .hasNext ()) {
@@ -127,7 +128,7 @@ public ImageHeuristics getImageSizes(String imgFileName) throws
127128
128129 Iterator <ImageReader > imageReaderIteratorFromSuffix = ImageIO .getImageReadersBySuffix (suffix );
129130 while (imageReaderIteratorFromSuffix .hasNext ()) {
130- ImageReader reader = imageReaderIteratorFromSuffix .next ();
131+ reader = imageReaderIteratorFromSuffix .next ();
131132 formatFromSuffix = reader .getFormatName ();
132133
133134 if (formatFromSuffix != null && formatFromSuffix .equals (formatFromInputStream )) break ;
@@ -138,20 +139,14 @@ public ImageHeuristics getImageSizes(String imgFileName) throws
138139
139140
140141
141- if (formatFromSuffix != null && formatFromSuffix .equals (formatFromInputStream )) {
142+ if (formatFromSuffix != null && formatFromSuffix .equals (formatFromInputStream )) {
142143 // file format and file extension matches; read image file
143-
144- try {
145- BufferedImage image = ImageIO .read (tempFile );
146- if (image == null ) {
147- report .message (MessageId .PKG_021 , EPUBLocation .create (imgFileName ));
148- return null ;
149-
150- } else {
151- int width = image .getWidth ();
152- int height = image .getHeight ();
153- return new ImageHeuristics (width , height , tempFile .length ());
154- }
144+
145+ try (ImageInputStream stream = new FileImageInputStream (tempFile )) {
146+ reader .setInput (stream );
147+ int width = reader .getWidth (reader .getMinIndex ());
148+ int height = reader .getHeight (reader .getMinIndex ());
149+ return new ImageHeuristics (width , height , tempFile .length ());
155150 }
156151 catch (IOException e )
157152 {
0 commit comments