Javaによる画像ファイルの扱い
Javaで画像ファイルを扱いたかったので、その時の調査メモ
画像の読み書き
「ImageIO.read」で読み込み、「ImageIO.writ」で書き込む。
// 画像の読み込み BufferedImage img = ImageIO.read(new File("foo.png")); // 画像の書き込み ImageIO.write(img, "gif", new File("hoo.gif"));
なお、読み込み・書き込み時に指定できるフォーマットは以下の方法で取得可能。
// 読み込み可能な画像フォーマット System.out.println("Reader:"); for(String s : ImageIO.getReaderFormatNames()) { System.out.println(" " + s); } // 書き込み可能な画像フォーマット System.out.println("Writer:"); for(String s : ImageIO.getWriterFormatNames()) { System.out.println(" " + s); }
画像の幅・高さの取得
高さや幅はBufferedImageのメソッドから取得可能。
// 幅、高さの取得 System.out.println("Width:" + img.getWidth()); System.out.println("Height:" + img.getHeight());
画像の編集
BufferedImageに対し、「createGraphics」を適用する事で「Graphics2D」が取得できるため、それを使用して色々と弄ることができる。
// 画像の編集 Graphics2D g2 = img.createGraphics(); g2.setPaint(Color.BLUE); g2.fillRect(10, 10, 30, 30); g2.dispose();
上の例では、青い四角形の描画を行っている。むろん、色々な図形を描いたりすることが可能。
新しい描画領域の確保
BufferedImageを新たに作成すれば、新たな領域を使用して色々と弄れる。
// 新たなバッファの確保 BufferedImage img2 = new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = img2.createGraphics(); //色々と画像を編集して ImageIO.write(img2, "png", new File("aa.png")); // 保存
画像のピクセル単位の直接編集
「getRGB」と「setRGB」を使用することで、画像データをピクセル単位で編集することができる。
// 読み込み int argb = img.getRGB(53, 20); int a = (argb>>>24) & 0xff; int r = (argb>>>16) & 0xff; int g = (argb>>> 8) & 0xff; int b = argb & 0xff; System.out.println("a:"+a+" r:"+r+" g:"+g+" b:"+b); // 編集 b = b * 50 % 256; // 書き込み img.setRGB(50, 20, a<<24|r<<16|g<<8|b);