私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

JavaでGIFアニメの抜き出し

GIFアニメの文字列をOCRで抜き出すために分割処理が必要になった。
以下、そのコード。画像を扱った経験が少なかったので少し手間取った。
close処理はどうなるのか未確認。

package project1;

import java.awt.image.BufferedImage;

import java.io.File;
import java.io.IOException;

import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;

public class GifTest {
	public GifTest() {
	}

	public static void main(String[] args) {
		// http://codezine.jp/article/detail/497?p=2
		
		// パス類
		String inputDir = "D:\\work\\java_gif\\img\\";
	    String outputDir = inputDir;
		String prefix = "sample";
		String extName = "gif";

	    ImageReader imageReader = null;
	    ImageWriter imageWriter = null;
		
		try {
			Iterator it = ImageIO.getImageReadersByFormatName(extName);

			// 読み込み
			imageReader = it.hasNext() ? (ImageReader)it.next() : null;
			imageReader.setInput(ImageIO.createImageInputStream(new File(inputDir, prefix + "." + extName)));

			// 書き込み
		    Iterator itr = ImageIO.getImageWritersByFormatName(extName);
		    imageWriter = itr.hasNext() ? (ImageWriter)itr.next() : null;

			int count = imageReader.getNumImages(true);
			for (int i = 0; i < count; i++) {
				BufferedImage tmpImage = imageReader.read(i);
				imageWriter.setOutput(ImageIO.createImageOutputStream(new File(outputDir, prefix + i + "." + extName)));
				imageWriter.write(tmpImage);
				imageWriter.dispose();
			}
			imageReader.dispose();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally{
			
		}
	}
}