ImageMagick を使用して画像操作を行っています。入力ストリームを返すサービスからファイルをストリーミングし、ファイルを HDD にヒットさせずにオンザフライで画像操作を実行しようとしています。
InputStream、OutputStream、FileOutputStream クラスを使用して入力ストリームをファイルに変換すると、結果のファイル サイズは、サービスに保存されているファイルと同じになります (初期ファイル サイズは 9 MB)。これで問題ありません。ImageMagick を介して入力ストリームを実行すると、何も操作していなくても、結果のファイルはかなり小さくなります (2 MB)。何が間違っているのか、または知らないうちに ImageMagick がファイルに対して何かを行っているのかどうかはわかりません。これが私のコードのスニペットです:
IMOperation op = new IMOperation();
ConvertCmd convert = new ConvertCmd();
InputStream is = s.getFileFromBucket(BUCKET, filename);
op.addImage("-"); // read from stdin
op.addImage(outfile);
Pipe pipeIn = new Pipe (is,null);
convert.setInputProvider(pipeIn);
convert.run(op);
is.close();
そのため、ファイルはまだ何もしていないので、入ってくるのと同じサイズになると予想していましたが、ファイルは小さくなっています。
ストリーミング中にサービスが途中で停止した可能性があると誰かが示唆していたため、ファイルが非常に小さいのです。ImageMagick を使用して実行したすべてのテストで、出力ファイルのサイズが同じ (2 MB) であるため、これは当てはまらないと思います。また、ビューアを使用して結果のファイルを見ると、問題なくファイルが表示されます。最後に、入力ストリームをファイルに変換すると、常に 9 MB のファイルになり、ビューアで問題なく表示されます。