一時ファイルを使ったファイル加工プログラムを「パイプ」を使ったスマートな形にしたいです。下記ソースを直してください。
//ImageMagickで画像変換
Runtime.getRuntime().exec(”convert -resize 32x32 tmp_src.gif tmp_dst.gif”);
部分を何とかパイプを使った構造にしたいです。
ソースは下記です。
http://favlog.net/hatena/20040721_ImageMagickTest.zip
なぜ、パイプを使う方が「スマート」なのでしょう。その理由を教えてください。
ファイル名固定はさすがにまずいですが、スレッドごとに違うファイル名にすれば、マルチスレッドで動いても問題ないはずです。
逆にパイプにこだわるとプラットフォームを制限することになりマイナス面が多いと思いますが。
http://www.nurs.or.jp/~sug/soft/java/java261.htm#sec614
Deep Side of Java〜Java 言語再入門 第2回 〜 java.lang.*
convert コマンドは出力ファイル名を - にすると標準出力に対して出力されるようになります。なのでこのようにすると良いです。
Process ps = Runtime.getRuntime().exec(”convert -resize 32x32 tmp_src.gif -”);
BufferedInputStream in = new BufferedInputStream(ps.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1000];
int n;
while ((n = in.read(buf)) > 0)
out.write(buf, 0, n);
in.close();
buf = out.toByteArray();
これで buf に読み込んだ内容が入ります。
ありがとうございます!
tmp_src.gif
もパイプからの内容に出来たら完璧です。
よろしくお願いします。
Yahoo! JAPAN
URLはダミーです。
入力も標準入力にしたいなら convert -resize 32x32 - - です(入力ファイル名、出力ファイル名共にマイナス記号にする)。
ありがとうございます!
ありがとうございます!
ファイルをいつ消すかという問題が無いのでスマートと考えました。どうでしょうか?