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

标签 java image maven tomcat tiff

我正在尝试将 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/

相关文章:

java - 如何根据先前的选择从下拉列表中进行选择?

java - 图像未显示在 JSP 文件中

image - react native 状态动态颜色

java - 使用 Spring Mvc 4 的 NetBeans glasfish4 中的 MojoException

java - 如何使用 Tycho 将 java 项目构建为带有 Maven 的 OSGi 部署包?

java - 使用pdfbox创建pdf时出错 : Identifier expected after this token

java - GWT 2.6 的用户代理?

java - 如何在 spring 应用程序上下文 xml 文件中使用 pom.xml 中的属性?

java - 二维数组平均值 (Java)

html - 如何设置适合div的背景图片大小