画像の一部を別ファイルに保存する。

Java Image I/O API ガイド を読みながら、プログラムを作ってみた。

gif 形式の画像の左上4分の1の部分を png 形式で保存している。

import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.io.File;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;

public class Test {
    public static void main(String[] args) {

        Iterator readers = ImageIO.getImageReadersByFormatName("gif");
        ImageReader reader = (ImageReader)readers.next();

        File source = new File("test.gif");
        BufferedImage bi = null;
        try {
            ImageInputStream iis = ImageIO.createImageInputStream(source);
            reader.setInput(iis, true);

            int imageIndex = 0;
            int halfWidth = reader.getWidth(imageIndex) / 2;
            int halfHeight = reader.getHeight(imageIndex) / 2;
            Rectangle rect = new Rectangle(0, 0, halfWidth, halfHeight);
            ImageReadParam param = reader.getDefaultReadParam();
            param.setSourceRegion(rect);

            bi = reader.read(imageIndex, param);

        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

        Iterator writers = ImageIO.getImageWritersByFormatName("png");
        ImageWriter writer = (ImageWriter)writers.next();

        File out = new File("test1.png");
        try {
            ImageOutputStream ios = ImageIO.createImageOutputStream(out);
            writer.setOutput(ios);
            writer.write(bi);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

    }
}