0

Java アプリケーションでJ2K イメージ ファイル (jp2、jp2000)をロードする際に問題に直面しています。奇妙なのは、スタンドアロン Java アプリケーションとして (またはテストで) 実行すると、アプリケーションが正しく実行される (ファイルがディスクから正常に読み取られる) という事実です。

Tomcat アプリケーション サーバーにデプロイした後、ImageIO.read(..)メソッドは毎回 null を返します。

どんな助けでも感謝します。

シモン

4

1 に答える 1

1

更新: @haraldK からのコメントを確認した後、解決策はページhttps://github.com/haraldk/TwelveMonkeys (Web アプリでプラグインをデプロイするセクション) で詳しく説明されています。

web.xml でリスナーを定義する必要があります。

<web-app ...>

...

    <listener>
        <display-name>ImageIO service provider loader/unloader</display-name>
        <listener-class>com.twelvemonkeys.servlet.image.IIOProviderContextListener</listener-class>
    </listener>

...

</web-app>

この Maven 依存関係をプロジェクトに追加する必要もあります。

<dependency>
   <groupId>com.twelvemonkeys.servlet</groupId>
   <artifactId>servlet</artifactId>
   <version>3.0.2</version> 
</dependency>

その他の、あまり好まれていない解決策は次のとおりです(これは、ここで言及した最初の解決策です):グーグルで検索した後、このページを見つけました- on-glassfish-server-without-a-npe/には、glassfish や tomcat などのアプリケーション サーバーを使用する場合の J2K imageio サービス プロバイダーの解決の問題が記載されています。

この記事によると、解決策は簡単です。リーダーを直接使用するだけです:

public BufferedImage getJPEG2000Image(byte[] data){

ImageInputStream iis = null;
BufferedImage image=null;
  try {
    iis = ImageIO.createImageInputStream(new ByteArrayInputStream(data));
    com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi j2kImageReaderSpi = new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi();
    com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReader j2kReader = new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReader(j2kImageReaderSpi);
    j2kReader.setInput(iis, true);
    image = j2kReader.read(0, new com.sun.media.imageio.plugins.jpeg2000.J2KImageReadParam());
  }
  catch (Exception e){
      e.printStackTrace();
  }
  return image;
}

この Maven 依存関係も必要です。

<dependency>
   <groupId>com.sun.media</groupId>
   <artifactId>jai_imageio</artifactId>
   <version>1.1</version>
</dependency>
于 2015-03-30T16:01:37.950 に答える