gpt4 book ai didi

java - Tiff 的 getImageWritersByFormatName 问题。获取图像写入器

转载 作者:行者123 更新时间:2023-11-28 22:04:56 29 4
gpt4 key购买 nike

我正在尝试将 PDF 转换为 tif 图像。我使用以下代码按格式获取图像编写器。

Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("TIFF");

if (writers == null || !writers.hasNext()) {
throw new ImageWritingException();
}

当我在 Eclipse 中独立运行应用程序时,它工作正常。但是当我将应用程序部署到 linux 中的 tomcat 服务器时,writers==null 为假但 !writers.hasNext 为真导致抛出异常。

我使用 maven 将项目构建到 war。

我在 pom 文件中有以下依赖项。

<dependency>
<groupId>org.icepdf</groupId>
<artifactId>icepdf-core</artifactId>
</dependency>

<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
</dependency>

<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai-codec</artifactId>
</dependency>

<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_core</artifactId>
</dependency>

两种环境之间有什么区别?我该如何解决这个问题?

最佳答案

我遇到了同样的问题并找到了根本原因。

我先总结一下,开发机上的eclipse没有出现这个问题,Tomcat服务器上出现了。

根本原因是imageio使用了SPI,JDK中有基本的实现(引用rt.jar,我们可以找到bmp和jpeg两个插件),而我们要的插件在jai_imageio 。 jar 。

使用默认配置,Tomcat 在 ImageIO 初始化期间扫描 rt.jar 中的插件。稍后当应用程序运行时,将不会扫描 jai_imageio.jar。

因此 jai_imageio.jar 中的插件不可用。在开发机器上运行时,会扫描 jai_imageio.jar。

下面有几种解决方案,我推荐第一种,因为它符合ImageIO的设计意图。

  1. 不改变tomcat默认配置,重新扫描jar。

    静态{ ImageIO.scanForPlugins();

  2. 更改 tomcat 配置,使 tomcat 不会初始化 ImageIO。编辑文件/conf/server.xml,添加appContextProtection="false"如下:

通过这样的配置,tomcat 不会在 JreMemoryLeakPreventionListener 中调用 ImageIO.getCacheDirectory,因此直到我们的代码运行时 ImageIO 才会被初始化。

关于java - Tiff 的 getImageWritersByFormatName 问题。获取图像写入器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22523644/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com