在 Java 中检测图像编码

ale*_*ntd 2 java javax.imageio

我正在接受用户输入的图像。我只想允许 JPEG 图像。图像作为 InputStream 到达(myInputStream下面称为)。在下面的代码中,返回的 IteratorImageIO.getImageReaders()始终为空。

ImageInputStream imageInputStream = ImageIO.createImageInputStream(
    myInputStream);
Iterator<ImageReader> iter = ImageIO.getImageReaders(imageInputStream);
if (!iter.hasNext()) {
    // this always happens
}
ImageReader reader = (ImageReader) iter.next();
if (!reader.getFormatName().equals("jpeg")) {
    // haven't got this far yet
}
Run Code Online (Sandbox Code Playgroud)

我也试过myInputStream直接传递到ImageIO.getImageReaders()相同的结果。

rod*_*ion 5

一个空的迭代器通常意味着 ImageIO 没有找到一个好的图像阅读器来解码你的图像。这可能是因为您的类路径中缺少正确的解码器,或者您的图像具有不受支持的颜色模型