我正在使用Java 8 (具体来说是OpenJDK 8)进行一个项目,需要从JPG文件中读取图像。一开始搜索到一些类似的问题(例如将字节数组读入缓冲区图像而不使用ImageIO和是否有一种完全由Java编写的替代ImageIO读取JPEG文件的方法?),但我的问题与此不同,并且那里提供的解决方案不符合我的要求。
事实证明,JPEGImageReader
类仍然缺失。(参见openjdk-8: Missing JPEGImageReader functions in libjavajpeg.so)。虽然这个错误报告是针对Debian的,但我使用的是Kubuntu 14.10,也受到影响。
根据该报告的最后一条消息,目前似乎没有人在处理此问题...
可以用以下代码片段重现此错误:
// ...
BufferedImage img = null;
try {
img = ImageIO.read(new File(filename));
} catch (IOException e) {
throw new RuntimeException(e);
}
// ...
文件路径有效,如果我使用Java 1.7,这个功能可以正常工作,但是更改为1.8会导致在ImageIO.read
调用时出现以下异常:
Caught UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageReader.initReaderIDs(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;)
我希望在避免以下问题的情况下解决这个问题:
- 不需要依赖其他/外部库;
- 不需要回到Java 1.7;
- 不需要重新构建源代码;
- 不需要使用Oracle JDK的专有实现
JPEGImageReader
类,它无法完成。这会导致原始帖子中提到的UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageReader ...
异常。 - code_dredd