java - 尝试使用 ImageIO.read 读取 PNG 图像时,在 Tomcat 8 服务器中获取 java.lang.NoClassDefFoundError: com/sun/medialib/codec/png/Decoder
问题描述
在我的 Tomcat 8 服务器的最近部署中,当我尝试使用 ImageIO.read() 将 PNG 图像读取为 InputStream 时出现以下错误,如下所示:
InputStream imageInput = storageResource.getData();
BufferedImage originalImage = ImageIO.read(imageInput);
错误:
javax.imageio.IIOException: codecLib error
at com.sun.media.imageioimpl.plugins.png.CLibPNGImageReader.decode(CLibPNGImageReader.java:78)
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.getImage(CLibImageReader.java:497)
at com.sun.media.imageioimpl.plugins.png.CLibPNGImageReader.getImageTypes(CLibPNGImageReader.java:117)
at javax.imageio.ImageReader.getRawImageType(ImageReader.java:681)
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.read(CLibImageReader.java:571)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1352)
at com.media.entra.publication.image.PlatformImageUrlHandler.getImageCreationDescriptor(PlatformImageUrlHandler.java:272)
at com.media.entra.publication.image.PlatformImageUrlHandler.parseImageUrl(PlatformImageUrlHandler.java:208)
at de.think.image.ImageProcessor.doBefore(ImageProcessor.java:80)
at com.scened.presentation.servlet.ProcessorFilter.doFilterImpl(ProcessorFilter.java:74)
at com.twelvemonkeys.servlet.GenericFilter.doFilter(GenericFilter.java:206)
at com.scened.presentation.servlet.LooseFilterChain$Chain.doFilter(LooseFilterChain.java:153)
at com.scened.presentation.servlet.ProcessorFilter.doFilterImpl(ProcessorFilter.java:76)
at com.twelvemonkeys.servlet.GenericFilter.doFilter(GenericFilter.java:206)
at com.scened.presentation.servlet.LooseFilterChain$Chain.doFilter(LooseFilterChain.java:153)
at com.scened.presentation.servlet.ProcessorFilter.doFilterImpl(ProcessorFilter.java:76)
at com.twelvemonkeys.servlet.GenericFilter.doFilter(GenericFilter.java:206)
at com.scened.presentation.servlet.LooseFilterChain$Chain.doFilter(LooseFilterChain.java:153)
at com.scened.presentation.servlet.LooseFilterChain.filter(LooseFilterChain.java:69)
at com.scened.presentation.servlet.CompositeFilter.doFilterImpl(CompositeFilter.java:36)
at com.twelvemonkeys.servlet.GenericFilter.doFilter(GenericFilter.java:206)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.scened.presentation.servlet.BootstrapFilter.doFilterImpl(BootstrapFilter.java:81)
at com.twelvemonkeys.servlet.GenericFilter.doFilter(GenericFilter.java:206)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at com.googlecode.psiprobe.Tomcat80AgentValve.invoke(Tomcat80AgentValve.java:41)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: com/sun/medialib/codec/png/Decoder
at com.sun.media.imageioimpl.plugins.png.CLibPNGImageReader.decode(CLibPNGImageReader.java:75)
... 44 more
问题似乎出在这个源自 jai-imageio-core 的 CLibPNGImageReader.java 文件中。我检查了我的 lib 文件夹,似乎我有这个 JAR(jai_imageio-1.1.jar & 还有 jai_core-1.1.3.jar & jai_codec-1.1.3.jar)。我必须指出,我不直接导入 jai 包,它们可能是 javax.imageio.ImageIO 的依赖项。
有没有办法找到这个问题的原因?
解决方案
推荐阅读
- c# - “SkiaSharp.SKImageInfo”的类型初始化程序引发异常 Avalonia
- machine-learning - 将分类数据输入到具有多个输入的 keras 模型中的嵌入层
- assembly - 进行二进制减法时如何检测溢出
- html - 将下拉菜单转换为 select2
- firebase - 为什么我的 DateTime 出现此错误?飘飘然
- python - moviepy write_videofile 在远程主机上给出错误
- python - 如何在 Django 的多租户数据库架构中创建具有租户独有的递增字段的新模型条目?
- typescript - 推断采用可区分联合的函数的返回类型?
- react-native - 文本字符串必须在
组件错误 - javascript - React Native JavaScript Emoji 正则表达式问题