SHINN::Scribble

2005.07.19

Java ImageIO  はてなブックマーク - Java ImageIO

ファイルに保存されたイメージデータの縮小・グレースケール化を Java で行う機会があったので,ImageIO パッケージ を使ってみました。

イメージファイルの読み込みは非常に簡単で,ImageIO.read メソッドを呼び出すだけです。読み込み後は,幅や高さを取得することが出来ます。

String filePath = "test.jpg";
File imageFile = new File(filePath);
BufferedImage image = ImageIO.read(imageFile);
int width = image.getWidth();
int height = image.getHeight();

読み込んだイメージデータの縮小には,AffineTransformOp を利用します。今回使用した J2SE 1.4.2 では,補間方法としてバイリニアとニアレストネイバーしか用意されていないため,あまりキレイな画像を得られませんでした。J2SE 1.5.0 からは補間方法としてバイキュービックが追加されたようなので,よりキレイな画像を得られるはずです。ちなみに率の計算が異なるだけでイメージデータの拡大も同じです。

// 縦横の縮小率を計算して,小さい方を縮小率とする
// (縦横比を維持するため)
double ratio = Math.min(
      (double)newWidth / (double)width,
      (double)newHeight / (double)height);
int shrinkedWidth = (int)(width * ratio);
int shrinkedHeight = (int)(height * ratio);

// イメージデータを縮小する
BufferedImage tmpImage = new BufferedImage(
      shrinkedWidth,
      shrinkedHeight,
      image.getType());
AffineTransformOp atOp = new AffineTransformOp(
      AffineTransform.getScaleInstance(ratio, ratio),
      AffineTransformOp.TYPE_BILINEAR);
atOp.filter(image, tmpImage);

イメージデータのグレースケール化には,ColorConvertOp を利用します。

BufferedImage tmpImage = new BufferedImage(
      width,
      height,
      image.getType());
ColorSpace cs =
      ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp ccOp = new ColorConvertOp(cs, null);
ccOp.filter(image, tmpImage);

イメージデータの書き出しも読み込みと同様簡単で,出力フォーマットに対応した ImageWriter を取得して書き出すだけです。なお,GIF 用の ImageWriter は用意されていないようなので,JPEG か PNG で書き出すことになります。

String dstFilePath = "test2.jpg";
Iterator writers =
      ImageIO.getImageWritersBySuffix("jpg");
ImageWriter writer = (ImageWriter)writers.next();

File imageFile = new Flie(dstFilePath);
ImageOutputStream os =
      ImageIO.createImageOutputStream(imageFile);
writer.setOutput(os);
writer.write(image);

TrackBackshttp://shinn.boo.jp/mt/mt-tb.cgi/43

Comments

  • : 2007.08.31 14:31

    > GIF 用の ImageWriter は用意されていないようなので,JPEG か PNG で書き出すことになります。
    gif-pluginや、FreeHEP Java Library 1.2.2というプラグインを入れると、
    GIFで書き出せます。
    ---
    ・gif-plugin(ライセンス:Apache2.0)
    ・FreeHEP Java Library 1.2.2(ライセンス:LGPL)
    ---

コメントをどうぞ




保存しますか?


 
Mail,メール  twitter,フォロー  RSS,フィード

CATEGORIES

DOWNLOADS

COCOMEISTER

ココマイスターのバッグ

 

    この日記のはてなブックマーク数  Powered by Movable Type 3.33-ja   blogram投票ボタン