Javaで扱える画像ファイル

 

まいど、イガジーです。
Java1.5から、画像ファイル(jpgやpng)を簡単に扱えるようになりました。

どういう画像ファイル(画像フォーマット)が扱えるかは、
ImageIO.getWriterFormatNames();
で、文字配列として得られます。
String[] formatNames=ImageIO.getWriterFormatNames();
for (int i=0;iを実行すると
jpg BMP bmp JPG jpeg wbmp png PNG JPEG WBMP GIF gifという感じの出力が得られます。
例えば、jpg=JPG=jpeg=JPEG なので、この例では
jpeg, bmp, wbmp,png, gif の5種類が扱えるという事になります。

画像ファイルの読み込みは、
BufferedImage b=ImageIO.read(new File(filename));
で、フォーマットは自動判別されます。
書き込みは
ImageIO.write(b2, "png", new File(filename));
などとして、フォーマット(↑の例では"png")を指定します。

この第2パラメータで指定できる文字列が、冒頭に書いた
ImageIO.getWriterFormatNames();で得られるのです。
(※ 読み込み・書き込み共に、try catchで囲う必要があります)

pngファイルの場合は、作り方によって内部形式が異なるようで
BufferedImage b=ImageIO.read(new File("hoge.png"));
ImageIO.write(b, "jpg", new File("fuga.jpg"));
と、画像フォーマットを変えて保存すると、色がおかしくなる事があります。
(pngを読み込んだ時に、BufferedImageの型がTYPE_4BYTE_ABGR
だったりすると変になるようです。)

この場合は、
BufferedImage b=ImageIO.read(new File("hoge.png"));
int ww=b.getWidth();
int hh=b.getHeight();
b2=new BufferedImage(ww,hh,BufferedImage.TYPE_INT_RGB);
Graphics g2=b2.getGraphics();
g2.drawImage(b,0,0,null);
g2.dispose();
ImageIO.write(b2, "jpg", new File("fuga.jpg"));
と、
TYPE_INT_RGB の BufferedImageを用意して
そこに描画してから保存するとうまくいきます。
(※ 実際は読み込みや書き込みは、try catchで囲う必要があります)

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)