ImageReader returns .getFormatName() 方法格式错误
ImageReader returns the wrong format by .getFormatName() method
我在返回 jpg 格式时遇到问题。当我的文件是jpg格式时,最终格式是jpeg。我的方法:
public String getImageFormat(InputStream input) throws IOException {
ImageInputStream stream = ImageIO.createImageInputStream(input);
Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);
if (!iter.hasNext())
return null;
ImageReader reader = iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
try {
reader.read(0, param);
return reader.getFormatName();
} finally {
reader.dispose();
stream.close();
}
}
我注意到 orginatingProvider returns 中 jpg 的图像 reader 是这样的:
我想收到照片的实际格式,有没有人遇到过这样的情况,知道如何解决?
正如评论已经指出的那样,格式名称没有错。实际格式真的叫做“JPEG”,"Joint Photographic Experts Group" 的缩写。 .jpg
或 .JPG
通常用于文件扩展名的原因是神秘的文件系统只允许 3 个字母的文件扩展名。
另一方面,如果您真正想知道的是文件扩展名,请使用 File
对象,并提取文件名中点后的部分。使用 ImageIO
对这样的任务来说太过分了。
File file = new File(...);
String fileName = file.getName();
int index = fileName.lastIndexOf('.');
if (index >= 0) {
return fileName.substring(index + 1);
}
// No period found
return null;
我在返回 jpg 格式时遇到问题。当我的文件是jpg格式时,最终格式是jpeg。我的方法:
public String getImageFormat(InputStream input) throws IOException {
ImageInputStream stream = ImageIO.createImageInputStream(input);
Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);
if (!iter.hasNext())
return null;
ImageReader reader = iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
try {
reader.read(0, param);
return reader.getFormatName();
} finally {
reader.dispose();
stream.close();
}
}
我注意到 orginatingProvider returns 中 jpg 的图像 reader 是这样的:
我想收到照片的实际格式,有没有人遇到过这样的情况,知道如何解决?
正如评论已经指出的那样,格式名称没有错。实际格式真的叫做“JPEG”,"Joint Photographic Experts Group" 的缩写。 .jpg
或 .JPG
通常用于文件扩展名的原因是神秘的文件系统只允许 3 个字母的文件扩展名。
另一方面,如果您真正想知道的是文件扩展名,请使用 File
对象,并提取文件名中点后的部分。使用 ImageIO
对这样的任务来说太过分了。
File file = new File(...);
String fileName = file.getName();
int index = fileName.lastIndexOf('.');
if (index >= 0) {
return fileName.substring(index + 1);
}
// No period found
return null;