- - PR -
Java1.4でJPEGを読み込む
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-18 19:48
みなさん、こんにちは。
Java1.4でJPEGを読み込む方法には、私の知る限り3通りあります。 1. Toolkit & MediaTracker 2. com.sun.image.codec.jpeg.JPEGCodec 3. javax.imageio.ImageIO 簡単に使えるのは3なのですが、一番新しいはずなのに一番遅く、特定のJPEGで異常に重いのです。ちなみに、一番速いのは2ですが、SunのJDKでしか動かないし、あまり使いたくはありません。 皆さんは、JPEGを読み込むときどのようにしていらっしゃいますか?また、このあたりについて詳しいサイトがあれば教えてください。 | ||||||||||||
|
投稿日時: 2003-08-18 22:08
こんにちは、さくらばです。
自分の Web の宣伝になってしまってすいませんが、まさに同じことを比較してます。 http://www5.airnet.ne.jp/sakuraba/java/laboratory/graphics/ImageLoading/ImageLoading.html J2SE のバージョンによっても変化しているようです。 J2SE 1.4.0 では Exif の大きいファイルを読み込むとエラーが起こることがあったの ですが、1.4.2 ではなくなっています。 また、Image I/O は次の URL で新しいツールキットが公開されています。多分、次の J2SE には入ると思いますが、一足早く使うことができます。このツールキットで JPEG 2000 も読み込めるようになりました。 また、普通の JPEG の読み込みも向上されているので、J2SE のバージョンをあげても だめであれば、このツールキットを試してみるのもいいと思います。 | ||||||||||||
|
投稿日時: 2003-08-18 22:11
すいません、URL を書き忘れました。
ここです。 http://java.sun.com/products/java-media/jai/downloads/download-iio.html | ||||||||||||
|
投稿日時: 2003-08-19 00:06
はじめまして、さくらばさん。Java In the Box の管理人さんだったんですね。よく閲覧させていただいてます。
情報ありがとうございます。さっそく試してみます。 | ||||||||||||
|
投稿日時: 2003-08-19 00:38
試してみました。やっぱり、特定のJPEGに対しては遅いです。例えば、下のファイルですが、com.sun....なら1秒未満で終わるのに、3秒ほどかかったりします。どうも、プログレッシブだと遅いようです。
http://www.msfc.nasa.gov/news/news/photos/2001/2001images/0176_illustration_with3_m.jpg http://www1.msfc.nasa.gov/NEWSROOM/news/photos/2002/2002images/gcenter_xray_rgb_m.jpg JavaTM Advanced Imaging Image I/O Tools 1.0 Notes Introduction には、「プログレッシブのデコードはできません。J2SE core のプラグインを使ってください」とあるので、将来は改善されるのかもしれません。(でも J2SE core も同じ挙動を示すんですよね でも、なぜ com.sun... で高速な実装をしておきながら、それを使わないんだろう。何か理由があるんでしょうか? #追記 J2SE core の JPEG Plugin を disable してないため、新しいプラグインが使われていない気がしてきました。また明日考えます・・・ [ メッセージ編集済み 編集者: ocean 編集日時 2003-08-19 01:04 ] | ||||||||||||
|
投稿日時: 2003-08-19 13:12
こんにちは、さくらばです。
どうやらプログレッシブは鬼門のようです ^^;; 以前、私が行っていたときは例外が起こってロードができなかったことを 思い出しました (J2SE 1.4 ベータのころだったと思います) それ以来、プログレッシブは触れてはいけないものと...
たぶん、いろいろな画像フォーマットを統一的に扱いたいからだと思います。 Image I/O を使えばフォーマットを気にすることなく扱えるのでプログラミング は楽なのですが、その分パフォーマンスには目をつぶっているのでしょう。
ちゃんとコードをおっていないので不確かなのですが、Image I/O Tools を入れると 勝手に新しい Plugin を使うようです。 ImageIO#read メソッドを使用しないで、ImageIO#getImageReaderByMIMEType メソッド などを使用すると、複数の ImageReader を取得することができます。 ImageIO#read メソッドでも内部では ImageReader オブジェクトを使用しているはず なので、core で提供されている ImageReader と Image I/O Tools のそれのどちらかを 選択しているのだと思います。 | ||||||||||||
|
投稿日時: 2003-08-19 15:33
こんにちは。
JPEGに特化すれば速くなるけど、ImageIOのフレームワークだとそこまで速くできないということですね。
貴重な情報ありがとうございます。試しに、 ImageIO.getImageReadersByMIMEType("image/jpeg"); で見たところ、新しいプラグインの優先度は J2SE core のプラグインより上でした。 また、ImageReaderで新しいプラグインを直接使ってみたところ、プログレッシブは表示しませんでした。つまり、プログレッシブの場合は処理できないので J2SE core のプラグインにまかせているようです。そのため速度が変わらなかったのだと思います。 #ImageIOについて理解が深まった気がします。さくらばさん、ありがとうございます。 [ メッセージ編集済み 編集者: ocean 編集日時 2003-08-19 15:59 ] | ||||||||||||
1
