Java を使用して gif 画像を jpeg に変換したいと考えています。ほとんどの画像でうまく機能しますが、単純な透明な gif 画像があります。
入力 gif 画像 http://img292.imageshack.us/img292/2103/indexedtestal7.gif
[画像が欠落している場合: 周囲に透明なピクセルがある青い円です]
次のコードを使用してこの画像を変換すると:
File file = new File("indexed_test.gif");
BufferedImage image = ImageIO.read(file);
File f = new File("indexed_test.jpg");
ImageIO.write(image, "jpg", f);
このコードは例外をスローせずに機能しますが、無効な jpeg 画像が生成されます。
[画像がない場合: IE では jpeg を表示できません。Firefox では無効な色の画像が表示されます。]
Java 1.5 を使用しています。
また、サンプル gif を gimp で png に変換し、その png を Java コードの入力として使用してみました。結果は同じです。
JDKのバグですか?できればサードパーティのライブラリを使用せずに画像を正しく変換するにはどうすればよいですか?
アップデート:
回答は、jpeg 変換が透明度を正しく処理できないことを示し (これはまだバグだと思います)、透明なピクセルを定義済みの色に置き換えるための回避策を提案します。提案された方法はどちらも非常に複雑であるため、より単純な方法を実装しました (回答として投稿します)。この回避策で最初に公開された回答を受け入れます(Markusによる)。どの実装が優れているかはわかりません。私は最も単純なものを選びますが、機能していないgifを見つけました。