画像を切り抜くコマンドをJavaで作った

Macで、コマンドラインから呼び出して画像を切り抜くやつが欲しかったんだけど、何かを追加でインストールするのがイヤだったので悩んだ。悩んだ結果Javaで書いてみた。

// Resizer.java
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Resizer {
	public static void main(String[] args) throws IOException {
		String inFile = args[0];
		int x = Integer.parseInt(args[1]);
		int y = Integer.parseInt(args[2]);
		int w = Integer.parseInt(args[3]);
		int h = Integer.parseInt(args[4]);
		String outFile = args[5];
		BufferedImage input = ImageIO.read(new File(inFile));
		BufferedImage output = input.getSubimage(x, y, w, h);
		ImageIO.write(output, "PNG", new File(outFile));
	}
}

以下でコンパイル

$ javac -J-Dfile.encoding=UTF-8 Resizer.java

「-J-Dfile.encoding=UTF-8」は文字化け対策。必須ではないけど、これを付けないとコンパイルエラーだったときに表示されるメッセージが読めない。

そして実行。

$ java Resizer input.jpg 100 200 300 400 output.png

コマンドラインオプションが6個ある。

  • 入力ファイル
  • 切り抜き開始X座標
  • 切り抜き開始Y座標
  • 切り抜く幅
  • 切り抜く高さ
  • 出力ファイル

画像の形式は、入力は何でも良いけど出力はpng

これで、input.jpgの(100, 200)の位置から、300x400で切り抜いた画像がoutput.pngとして保存される。

ダメだった

動作としては問題なく動いたけど、ダメだった。

Java入ってない

まず、Javaは最近のMacには入ってない。追加でインストールする必要がある。「何かを追加でインストールするのがイヤだったので」という前提から崩れた。

Javaが入ってないMacJavaをインストールするくらいならImageMagickとかを入れた方がいいよねきっと。

遅い

あと動作が遅かった。コードを実行してる部分は遅くない気がするけど、起動に時間がかかってる。Javaはそんなもんなのかな。何度も呼び出すには遅すぎる感じ。

やりたいこと全てをJavaで書いて一発だけ動かすにはいいんだと思う。でも別なスクリプトで色んなことを連続でやる中で、このコマンドを呼び出すっていう感じだと、すごい時間かかっちゃうので微妙。

まあいいや

ってことで、せっかく書いたけど使ってない。

残念。でも、BufferedImage#getSubimage なんていう便利なのがあるのは知らなかったので、その点がちょっとだけ勉強になったからいいや。