Java处理图片时遇到报以下错误,百度没有解决办法,于是在谷歌上找到了可行的办法,记录于此。
sun.awt.image.ImageFormatException: Invalid JPEG file structure: two SOF markers
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:141)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
解决办法:
File file = new File(imgPath);
//以下代码是处理部分图片黑色问题:(two SOF markers)
ImageInputStream input = ImageIO.createImageInputStream(file); // TODO: null check
Iterator<ImageReader> readers = ImageIO.getImageReaders(input); // TODO: hasNext check
ImageReader reader = readers.next();
reader.setInput(input);
// This is the important part, get or create a ReadParam,
// create a destination image to hold the decoded result,
// then pass that image with the param.
ImageReadParam param = reader.getDefaultReadParam();
BufferedImage image = reader.getImageTypes(0).next().createBufferedImage(reader.getWidth(0), reader.getHeight(0));
param.setDestination(image);
try {
image = reader.read(0, param); // Don't really need the return value here, as it will always be same value as "image"
}
catch (IOException e) {
// Ignore this exception or display a warning or similar, for exceptions happening during decoding
e.printStackTrace();
}